2009-12-25 229 views
4

我無法理解在C#中的代碼運營商<<在C#

int i=4 
int[] s =new int [1<<i]; 
Console.WriteLine(s.length); 

的輸出中是16 我不知道爲什麼輸出這樣呢?

回答

0

< <是左移位運算符

x << y 

意味着移位x至由y位的左邊。

3爲0011,3 < < 1爲0110,其6.

它通常使用2(左移被乘以2)

3

乘以我假設你在意味着ir的地方...

<<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

wft在downvote? – 2009-12-25 20:06:59

0

如前所述,< <是左移運算符。在您的具體示例中,陣列大小被定義爲2的冪。將值左移一些數字將爲1,2,4,8,16 ...

5

來自文檔

如果第一個操作數是int或uint (32位數量),則移位計數爲 ,由 的第二個操作數的低位五位給出。

如果第一操作數是長或ULONG (64位量),移位計數是由低階 第二操作數的6位給出 。

此外,i < < 1和I < < 33給出相同 結果,因爲1和33具有相同的 低位5個比特。

這將與2 ^(的低位5位的實際值)相同。

所以在你的情況下,它將是2^4 = 16