符号数右移时的诡异现象

采石工 2010-12-15 09:16:06
请大侠们解释下面的现象?

#include <stdio.h>

int main()
{
int c=0x97000000;

printf("%x\n",c>>31);//得到的结果是0xffffffff
printf("%x\n",(c>>31)>>1);//得到的结果是0xffffffff
printf("%x\n",c>>32);//得到的结果是0x97000000

return 0;
}
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuppy 2010-12-15
  • 打赏
  • 举报
回复
请高手多多补充~ 
yuppy 2010-12-15
  • 打赏
  • 举报
回复
c>>32 这个超过了该数值类型的最大位数,会先用32%32,再用这个值进行 移位
printf("%x\n",c>>33)
printf("%x\n",c>>1)
应该是一样的~~
采石工 2010-12-15
  • 打赏
  • 举报
回复
那为什么c>>32得到的结果是0x97000000,而不是0xffffffff呢

[Quote=引用 1 楼 yuppy 的回复:]

c是 signed int
1001011100.... 算术移位 左边都补 1--> 11111111111. 最后全是1了
[/Quote]
yuppy 2010-12-15
  • 打赏
  • 举报
回复
c是 signed int
1001011100.... 算术移位 左边都补 1--> 11111111111. 最后全是1了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧