首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

逻辑右移和算术右移,结果和小弟我预期的不一样

2012-06-01 
逻辑右移和算术右移,结果和我预期的不一样下面的代码运行输出:fff807f,1fff00ff //高位补0,那么为什么c1

逻辑右移和算术右移,结果和我预期的不一样
下面的代码运行输出:
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; } 

热点排行