2010-06-10 71 views
2
(uint)Convert.ToInt32(elements[0]) << 24; 
+3

在任何事情中說「這個」的好規則是讓它明確指出你所指的是什麼。你是指整行代碼?演員?移位運算符? 24號? – 2010-06-10 11:55:41

+0

如果您在之前的某些問題上接受了答案,這將有所幫助 – thecoop 2010-06-10 13:34:21

回答

4

的< <是left shift operator

鑑於數字是二進制數,它會將指定數量的所有位移到左邊。

如果我們有

2 << 1 

這將在二進制(00000010)2號,並將其轉移到左邊一位。這給你4(000000100)。

溢出

注意,一旦你到了最左邊的位被丟棄。所以假設你正在使用一個8位大小的整數(我知道c#uint就像你在你的例子中是32位 - 我不想輸出一個32位數字,所以假設我們在8位)

255 << 1 

將返回254(11111110)。

使用

非常小心前面提到的溢出,比特移位是一個非常快速的方式來乘或除以2。在一個高度優化的環境(例如遊戲),這是一個非常有用的方式非常快地執行算術。

然而,在你的例子中,它只佔用數字的最右邊8位,使它們成爲最左邊的8位(乘以16,777,216)。爲什麼你想這樣做,我只能猜測。

0

正如Mongus Pong所說,轉變通常用於快速增殖和分裂。 (由於溢出可能會導致奇怪的問題)。

我正要走出去,試圖猜測你的代碼在做什麼。

如果 elements [0]是一個字節元素(也就是說,它只包含8位),那麼這個代碼將導致直接乘以2^24。否則,它將丟棄24位高位並乘以2^24。

+1

我的代碼獲取客戶端IP地址並使用數據庫表中指定IP的範圍進行檢查。由於IP地址的直接比較是不可能的,所以我對它進行了分割,以便它在數組中有4個元素。在移位之後,我添加總和並將它與DB中的IP範圍進行比較(DB中的IP範圍也使用相同的邏輯進行分割)。 – SRA 2010-06-11 11:30:14