【发布时间】:2014-10-11 21:47:26
【问题描述】:
如果我在 32 位平台上将值声明为 int 类型并执行以下操作:
int32_t mask;
mask = 1 << 31: // produces 2147483648 (or 0x80000000)
有人能帮我理解为什么上面的行会产生警告吗:
The result of the '<<' expression is undefined
【问题讨论】:
-
哪个编译器,哪个语言,哪个版本的标准?这是在 C++14 中实现定义的,在所有其他版本的 C 和 C++ 中未定义。
-
@jww 怎么是重复的?得分最高的答案明确指出“未定义 32 或更多的班次”。这大约是 31 次。在这种情况下,答案是
int32_t是signed long int的 typedef 这一事实使它成为一个相同的问题,因为它已签名。 -
尝试以下操作来消除警告:
mask = (int32_t)(1UL << 31); -
@Niels - 阅读问题和答案。这种转变导致这个问题和引用的重复项都发生了符号变化。但你是对的......引用的问题应该说“超过31......”。