任何人都可以帮助我理解以下行为。
1 #include <iostream>
2
3 using namespace std;
4
5 main()
6 {
7 uint32_t i = 32;
8
9 // cout << "(1<<32): " << (1<<32) << endl; // - This leads to a compilation error.
10 cout << "(1<<32): " << (1<<i) << endl; // - This compiles and prints 1 - Why?
11
12 return 0;
13 }
如果我取消注释上面的第 9 行 - 我会看到以下编译错误(这对我来说很有意义)
BitWiseLeftShift.c++: In function 'int main()':
BitWiseLeftShift.c++:9: warning: left shift count >= width of type
但是第 10 行是我的问题所在。它编译成功并打印
(1<<32): 1
类似于循环位移。为什么会打印 1?我已经看到了i == 33
,(1<<i)
打印 2。
我确实搜索了论坛,但找不到相关问题。如果这是一个重复的问题 - 请帮助我提供链接。