源代码:
#include <iostream>
using namespace std;
int main() {
unsigned long P;
P = 0x7F << 24;
cout << P << endl;
P = 0x80 << 24;
cout << P << endl;
return 0;
}
输出:
2130706432
18446744071562067968
正如您所看到的,第一个结果是正确的。 但第二个结果极其错误。 期望的结果是2147483648,而它与18446744071562067968不匹配。
我想知道为什么。
0x80ul << 24
- Marek Rint
的实现,0x80
的类型为int
,左移后的结果也是int
类型。它不是无符号的。因此,0x80 << 24
会导致int
溢出,从而产生未定义的行为。 - Peter