为什么以下两个程序产生不同的输出?(C++,位操作,VS 2012)

Why the following two programs yield different outputs? (C++, bit operation, VS 2012)

本文关键字:输出 C++ 2012 位操作 VS 两个 为什么 程序      更新时间:2023-10-16

Program 1:

int x = 4 ^ (4>>32);
cout << x << endl;

输出为 4

计划2:

int x = 4;
int y = x ^ (x>>32);
cout << y << endl;

输出为 0

如果int具有 32 位或更少,则这两个代码片段都会引起未定义的行为。[expr.shift]/1:

如果正确的操作数为负数或更大,则行为未定义 大于或等于提升的左操作数的长度(以位为单位)。

因此,实现没有任何义务提供一致的结果。