逻辑右移和算术右移,结果和我预期的不一样
下面的代码运行输出:
fff807f,1fff00ff //高位补0,那么为什么c>>1的结果还是a呢?
fffffc00,ff0000ee
我期待的结果是
fff807f,FFF807F
FF800077,7F800077
除了第一个数字fff807f符合我的期待以外,其他都不一样。
我的注释就是我对这两个右移的理解,我也参考了网上的说法,基本都是这么说的。
为什么结果不对? 还是我的说法错误?
- C/C++ code
int main() { int a=0x1fff00ff; int b=a>>1;//算术右移,按符号位来补0 unsigned int c=a;//逻辑右移,补0 c>>1; printf("%x,%x\n",b,c);//我期待b和c相等 int i=0xff0000ee; int j=i>>i;//算术右移,按符号位来补1 unsigned int k=i;//逻辑右移,补0 k>>1; printf("%x,%x\n",j,k); return 0; }[解决办法]
哈哈,楼主真搞,你c右移又没有保存值,搞毛啊。
- C/C++ code
int main() { int a=0x1fff00ff; int b=a>>1;//算术右移,按符号位来补0 unsigned int c=a;//逻辑右移,补0 c=c>>1; printf("%x,%x\n",b,c);//我期待b和c相等,现在等了 int i=0xff0000ee; int j=i>>i;//算术右移,按符号位来补1 unsigned int k=i;//逻辑右移,补0 k>>1; printf("%x,%x\n",j,k); return 0; }