我無法理解在C#中的代碼運營商<<在C#
int i=4
int[] s =new int [1<<i];
Console.WriteLine(s.length);
的輸出中是16 我不知道爲什麼輸出這樣呢?
我無法理解在C#中的代碼運營商<<在C#
int i=4
int[] s =new int [1<<i];
Console.WriteLine(s.length);
的輸出中是16 我不知道爲什麼輸出這樣呢?
< <是左移位運算符
x << y
意味着移位x至由y位的左邊。
3爲0011,3 < < 1爲0110,其6.
它通常使用2(左移被乘以2)
乘以我假設你在意味着i
r
的地方...
<<n
意思是「左移n *位」。由於你從1 =二進制00 ... 00001開始,如果你左移4次,你會得到二進制00 ... 10000 = 16(這有助於你熟悉二進制算術 - 否則「calc.exe」有一個二進制轉換器)。
每位向左移動n
位,填充(右側)爲0。 * =請注意,n
實際上是「Mod 32」,因此對於int
,所以(作爲角落案例)1 < < 33 = 2,而不是您可能期望的0。
還爲-ve int
小號>>
(右移位),其移動爲右,與0
填充用於uint
s和+已經int
s和1
。
如前所述,< <是左移運算符。在您的具體示例中,陣列大小被定義爲2的冪。將值左移一些數字將爲1,2,4,8,16 ...
來自文檔
如果第一個操作數是int或uint (32位數量),則移位計數爲 ,由 的第二個操作數的低位五位給出。
如果第一操作數是長或ULONG (64位量),移位計數是由低階 第二操作數的6位給出 。
此外,i < < 1和I < < 33給出相同 結果,因爲1和33具有相同的 低位5個比特。
這將與2 ^(的低位5位的實際值)相同。
所以在你的情況下,它將是2^4 = 16。
wft在downvote? – 2009-12-25 20:06:59