概述
在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变
左移:
当左移的位数不超过该数值类型的最大位数时:逻辑左移(补0,丢弃最高位)
当左移的位数超过该数值类型的最大位数时:编译器会用左移的位数去模类型的最大位数,然后按余数进行移位(只是执行:左移 所得的余数 个位数)
int i = 1, j = 0x80000000; //设int为32位
i = i << 33; // 33 % 32 = 1 只左移1位,i变成2
j = j << 33; // 33 % 32 = 1 只左移1位,j变成0,最高位1被丢弃
右移:>>
算术右移:保持符号位不变,正数的话补0,负数补1,(补符号位)
int i = 0x80000000;
i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
>>> 向右移动的过程中,不管原来数的最高位是1还是0,都补0,所以我们应该根据需要来选择,右移是用>>>还是>>
参考:http://blog.csdn.net/tdcs111/article/details/61929445.
最后
以上就是清新画笔为你收集整理的C语言的左移和右移的全部内容,希望文章能够帮你解决C语言的左移和右移所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复