1
雖然測試出這個代碼在C#中左按位移位怪異的行爲
for (int i = 0; i <= 32; i++)
{
Console.WriteLine(i + " - " + ((byte.MaxValue + 1) << i));
}
我得到這些輸出
0 - 256
1 - 512
2 - 1024
3 - 2048
4 - 4096
5 - 8192
6 - 16384
7 - 32768
8 - 65536
9 - 131072
10 - 262144
11 - 524288
12 - 1048576
13 - 2097152
14 - 4194304
15 - 8388608
16 - 16777216
17 - 33554432
18 - 67108864
19 - 134217728
20 - 268435456
21 - 536870912
22 - 1073741824
23 - -2147483648
24 - 0
25 - 0
26 - 0
27 - 0
28 - 0
29 - 0
30 - 0
31 - 0
32 - 256
注意,從21到31,它給出的0這是預期的行爲,但在32,我回來了數字256.
我期待在32上0,但正如你可以看到我得到了256。有人可以給我什麼點NET運行時做一些見解時,看到一個左移32
這不是很棒嗎?向左移32與32向左移1並不相同!雖然很奇怪,但對於C和C++中的相同運算符來說,這是一個小改進,它沒有爲左移過多而定義特定的行爲。至少定義了C#行爲,雖然有點奇怪。 –