涉及二进制的位操作想必大家时间就了有时候就会模糊,又是搞不清楚的状态 所以这里就重温简述一下左移右移:
逻辑的左移:最高位移除,低位补0。
逻辑右的移:低位移除,高位补0。
算术的右移:看编译器是否执行逻辑(低位移除,高位补0)还是算术移(低位移除,高位补符号位,0正 1负)。
#include <stdio.h>
int main()
{
int x = 0xa2;
int b = x>>(5);
printf("%d\n",b);
return 0;
}
还有一种情况是:
涉及类型转换问题:计算式 b = ~a>>4+1按照优先级顺序计算估计都没问题,这里编译器会触发类型转换的功能。题目中会把无符号 char a =0xA5 自动转换成 int 型再接着计算式子,计算结果又会转换成无符号 char b。
更专业的资料显示:小于int类型长度的数据类型的数据在参与运算之前会先提升为int类型,这就是所谓