循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位正确结果:11101101
过程:
b=a>>(8-2)用来得到正常左移丢失的位和循环移位后其正确位置b=00000001
a=a<<2左移a=11101100
a=a|ba=11101101
如果不是用中间变量a=(a>>(8-2))|(a<<2)
总长度N(81632)
循环左移n:(a>>(N-n))|(a>>n)
循环右移n:(a<<(N-n))|(a>>n)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
扩展资料:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
参考资料来源:百度百科-c语言程序设计
C语言中按位左移的运算符为<<,其规则如下:
对于操作a<<n,
1 按照二进制值每位向高位(书写上是向左)移动n位;
2 最高位(最左边的)n位舍去;
3 最低位(最右边)填加n个0.
简单起见,用char型举例如下:
例一
0x12 <<3 =>
B00010010 <<3 =>
B10010 000(这里最高位的三个0被舍去,其它依次左移,最低位补三个0) =>
0x90
即0x12 <<3 = 0x90
例二
0x9E <<2 =>
B10011110 <<2 =>
B01111000 (最高位10舍去,最低位补两个0)=>
0x78
可以编写如下程序验证:
#include <stdio.h>void check(char a, int n)
{
printf("0x%hhx << %d = 0x%hhx\n", a, n, a<<n)
}
int main()
{
check(0x12, 3)
check(0x9e, 2)
return 0
}
其运行结果为
0x12 << 3 = 0x900x9e << 2 = 0x78
可以看到与我们计算结果是相符的。
C语言中,“<<”为左移运算符,“>>”为右移运算符。
具体使用方法如下:
1、左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a <<2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
2、右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a >>2 将a的二进制位右移2位。
左补0 or 补1 得看被移数是正还是负。