【发布时间】:2019-06-05 17:50:12
【问题描述】:
这是 C 文件中的 Windows 7 32 位 Visual Studio 2017。
int i = 65536;
正如所料,
i >> 0 = 65536
i >> 1 = 32768
:
:
i >> 16 = 1
i >> 17 to 31 = 0.
i >> 32 又是神奇的 65536。这怎么合法?
ISO/IEC 9899:TC2 规定如下,我认为 C++ 规范是相同的?
E1 >> E2 的结果是 E1 右移 E2 位位置。 如果 E1 有 一个无符号类型,或者如果 E1 有一个有符号类型和一个非负值, 结果的值是 E1 / 商的整数部分 2^E2. 如果 E1 有带符号类型和负值,则结果值 是实现定义的。
【问题讨论】:
-
标准中的相关引用应该是关于移位超过左侧操作数的位数的引用。
-
那里没有什么神奇之处,在其他一些语言中,这种行为甚至是强制
标签: c bitwise-operators bit-shift