首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >右移C99中的“C99”

右移C99中的“C99”
EN

Stack Overflow用户
提问于 2011-04-13 14:58:06
回答 1查看 734关注 0票数 3

可能重复:

Weird behavior of right shift operator

你好

为什么这个函数中的两个数字打印相同?这不是一个循环的转变。

代码语言:javascript
复制
unsigned int i=0x89878685;
int main()
{
  printf("0x%x\n", i);
  printf("0x%x\n", i>>32);
}

$ ./a.out
0x89878685
0x89878685

所有的编译器都是这样工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-13 14:59:02

将32位整数转换为32位是未定义的行为.结果是不可预测的。

在C和C++中,如果整数有N位,则只允许移动小于N位。如果您移动N或更多,则行为是未定义的。

实际上,当移动32位整数时,一些平台只会将移位计数解释为5位值(丢弃低于5位以上的任何位),这意味着32将被解释为与0相同的方式。这显然是发生在你的平台上。这个值一点也不动。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5651314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档