#include <iostream>
using namespace std;
int main() {
unsigned long P;
P = 0x7F << 24;
cout << P << endl;
P = 0x80 << 24;
cout << P << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2130706432
18446744071562067968
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个结果是正确的。但是第二个结果是极其错误的。预期结果为 2147483648,与 18446744071562067968 不匹配。
我想知道为什么
Kon*_*lph 10
表达式的类型0x80 << 24不是unsigned long,而是int。然后将该表达式的结果分配给P,并在此过程中将其转换为unsigned long。但那时它已经溢出(顺便导致未定义的行为)。unsigned long在表达式中使用文字:
P = 0x80ul << 24;
Run Code Online (Sandbox Code Playgroud)