`
luotuoass
  • 浏览: 641979 次
文章分类
社区版块
存档分类
最新评论

如何使用位运算实现循环移位?

 
阅读更多

循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。

设有数据说明:

a=01111011,循环左移2位 正确结果: 11101101

过程:

b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;
a=a<<2;左移 a=11101100

a=a|b; a=11101101

如果不是用中间变量 a=(a>>(8-2))|(a<<2)

总长度N(8 16 32)

循环左移n (a>>(N-n))|(a>>n)

循环右移n (a<<(N-n))|(a>>n)

C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。

分享到:
评论

相关推荐

    python实现整数的二进制循环移位

    以及&gt;&gt;运算符实现二进制的左移位以及右移位,然而并没有实现循环移位的运算符,暂时也找不到可以实现循环移位的函数,所以在本文中,主要介绍了如何使用字符的切片运算实现循环位移。 一、实现思路 1、利用字符串的...

    面向对象程序设计

    函数重载重载编程,用以实现循环左移,循环右移的位运算,移位位数在1~30000范围之内任意。

    MATLAB中circshift函数转化为C语言

    可以使用于数组和矩阵元素的循环移位。 当A是数组 B=circshift(A,p);如果p是正数则实现A从左到右的循环移位。如果p是负数则实现A从右到左的循环移位。 当A是矩阵 B=circshift(A,[p,0]);如果p是正数则实现A以行为...

    单片机浮点数的实用快速除法

    即利用循环移位和减法操作来得到 *- . (* 位商! 效率很低" 有些文献给出了一些改进方 法# * $ ! 但思路不清晰! 很难推广使用" 这里给出一种 浮点数除法运算的实用快速算法" 该方法以数值计算 中的预估/ 修正方法为...

    单片机快速开方运算

    只采用移位、加减法、判断和循环实现开方运算,因为它不需要浮点运算,也不需要乘除运算,可以很方便地运用到各种芯片上去。

    模拟CPU算术运算的C语言代码

    除了在必要的循环中使用了加法以外,只使用位操作(逻辑与或异或,移位等)模拟CPU的算术运算过程,支持整数与浮点的四则运算,包含字符串与浮点数的转换。

    简单的线性反馈移位寄存器(LFSR)C语言实现

    3)利用生成的序列对文本进行加/解密(按对应位作模2加运算)。 步骤: (1)生成序列:使用#include库构造序列,使用bint.to_string()将输入的01串转成字符串,用str暂存。将bint[3]和bint[0]异或,赋值给bint[4]...

    DES加密算法的C语言实现

    DES加密算法的C语言实现,运行环境VC++6.0,使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥...

    DES--C.rar_DES 16位密钥_feistel

    DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的...DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算

    javascript文档

    &= 运算符 对变量和表达式执行按位“与”运算,结果赋给变量。 && 运算符 对两个表达式执行逻辑连接运算。 * 运算符 将两个表达式的值相乘。 *= 运算符 将变量与表达式的值相乘,结果赋给变量。 + 运算符 将两个...

    DES.zip_ Feistel

    DES加密实现,DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,...

    超轻量级RFID双向认证协议的实现方法.pdf

    最后,通过新定义位重排变换操作,并结合左循环移位运算和模2的m次方加运算对认证过程中的秘密通信数据进行加密,可以有效解决目前RFID系统中存在的安全问题。BAN逻辑形式化安全性分析和性能对比分析表明:RRMAP具有...

    DES.rar_feistel_分组 加密 算法_改进DES

    DES算法的实现与改进,DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用...

    剑指offer面试题15. 二进制中1的个数(位运算)

    题目描述 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。...时间复杂度 O(log_2 n):此算法循环内部仅有 移位、与、加 等基本运算,占用 O(1)O(1) ;逐位判断需循环 log_2 n次,其中 log_2 n代表数

    实验2 软件中断实验加8259硬件实验

    2.亮2个灯暗6个灯、延时1秒、相反亮6个灯暗2个灯(同一位置)(采用逻辑运算指令p75),循环显示; 如:亮暗亮暗暗暗暗暗-1s-暗亮暗亮亮亮亮亮 3.亮1个灯,暗7个灯。按一次按钮,灯跳一格,从上到下循环点亮。要求:...

    计算机网络技术CRC冗余码检验.doc

    XXXX大学(计算机网络技术)实验报告 实验名称 CRC冗余码检验 实验... (7)重复(3)—(6),直至该报文所有字节均与32位寄存器进行"异或"运算,并移位 24次。 (8)这个32位寄存器的内容即4字节CRC错误校验 在C++下

    ALU实验报告.doc

    " "SLL "A sll B "逻辑左移B位 " "SRL "A srl B "逻辑右移B位 " "SRA "A sra B "算术右移B位 " "ROL "A rol B "循环左移B位 " ALU的输入数据为16位,操作码op为4位,算术运算时数据用补码表示。 实验步骤 本实验通过...

    右移运算流水点亮P1口8位LED,C代码

    用右移运算流水点亮P1口8位LED,C程序源码,包含单片机寄存器的头文件,设置循环次数为8,每次循环P1的各二进位右移1位,高位补0,调用延时函数……

    模乘算法的快速移位实现方法 (2009年)

    针对大数模乘算法的滑动窗口实现中移位次数较多,提出了一种适应芯片实现的快速循环移位实现方法。通过将大数乘法运算转换为查找表和加法运算,并减少进位的判断和增加每次循环移位的距离来减少加法次数和移位次数。...

    FPGA2cpu_verilog语言设计实现cpu的源码

    支持有符号和无符号整数加、减、乘、除运算,并支持浮点数加、减、乘、除四种运算,支持与、或、异或、非4种逻辑运算,支持逻辑左移、逻辑右移、算术右移、循环右移4种移位运算,支持Load/Store操作,支持地址/立即...

Global site tag (gtag.js) - Google Analytics