位移位运算符

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:31:47
C语言中出现的,不知道它的运算原理。希望能有人解惑,谢谢!

要了解移位运算,需明白二进制计数

以单字节为例,比如0x55=0b01010101

如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa

从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。

例如:

unsigned char a;
a=1; //0b00000001
a<<=1; //0b00000010 a左移1位等效于a=a*2
a<<=2; //0b00001000 a左移2位等效于a=a*2的2次方(4)
a<<=3; //0b01000000 a左移1位等效于a=a*2的3次方(8)
a<<=1; //0b10000010 a左移1位等效于a=a*2
a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了

c=a<<b; 在变量都是8位的时候,等效于 c=(a*pow(2,b))%256