誰かが私が次の行動を理解するのを手伝ってくれませんか。
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を印刷します。
フォーラムを検索しましたが、関連する質問が見つかりませんでした。これが重複する質問である場合は、リンクを教えてください。