
举个例子:将a左移2位,然后赋给a
a<<=2 也即缓并是a=a<毁圆<2
在C语言中左移1位,相当于乘扰余迹2,右移相当于除2。
C语言中没有循环移位,只有移位。就是遇到边界时,会被截断的,例如11110000左移2位就是11000000
当然,你这里的0x38,循环左移2位,和左移2位没什么区别,因为边界值都是0,但是像刚刚的11110000的循环左移和左移2位,就相差很大了。
如果你需要循环的话,可以这样使用:
a=0x38
b=a>>6
a=a<<2
a=b|a
a这个时候就是循环左移了两位。
如果需要左移而已,就如三楼所说。
还有,就像3楼说的,左移相当于乘,数会变大,右移相当于除,变小。具体如下:
左移N位,就相当于原来的值乘以2的N次幂;
右移N位,如果非负数的话,就是原来的值除以2的N次幂。
希望对你有用。
一、作用不同
1、5>>2:右移运算符,是将一个二进制位的 *** 作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位。
2、5<<2:左移运算符,将一个数的各二进制位全部左移慎缺若干位,移动的位数由右 *** 作数指定,右 *** 作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。
二、结果不同
1、5>>2:0000 0101 变成 0000 0001。
2、5<<2:0000 0101 变成 0001 0100。
三、特点不同
1、5>>2:实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。
2、5<<2:位移位运算符是同级别的,结合性是自左向右
参考资料来宽绝辩源:百度百科-左移运宏枯算符
参考资料来源:百度百科-右移运算符
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)