这是在 Windows 7 32 位系统下,使用 Visual Studio 2017 编写的 C 文件。
int i = 65536;
正如预期的那样,
i >> 0 = 65536
i >> 1 = 32768
:
:
i >> 16 = 1
i >> 17 to 31 = 0.
i >> 32 的结果神奇地变成了65536,为什么合法呢?
根据ISO/IEC 9899:TC2的规定,如果E1是无符号类型或者E1是有符号类型且其值非负,则E1 >> E2的结果为E1右移E2位的整数部分。如果E1是有符号类型且其值为负数,则结果取决于具体实现。我假设C++规范也是如此。