2012-01-04 89 views
0

可能重複:
What does the 「>>」 operator in C# do?操作>>在C#

而且相關:Doubling a number - shift left vs. multiplication

這是在C#代碼。

我只需要知道我是否正確。我不確定使用運算符>>

驗證碼:

winHalfWidth = this.ClientSize.Width >> 1; // both is int 

做出相同:

winHalfWidth = this.ClientSize.Width/2; 

,如果我是正確的話,這個碼應該做的:

quaterWidht = this.ClientSize.Width >> 2; 

應該做的一樣:

quaterWidth = this.ClientSize.Width/4; 

所以2問題:

  1. 是不是正確?
  2. 使用>>/有什麼區別?
    • 當我們談論int值?
    • 當我們談論浮動值嗎? (我的事情有可能是..但我'不知道。)

答案就像是/否將是不錯的:)

感謝。

+0

你試圖通過編寫測試代碼,然後調試它得到這些問題的答案權力被用於劃分?這是一種從語言和框架獲取「是/否」答案的簡單方法。 – Douglas 2012-01-04 20:43:44

+0

這是正確的,在條件。我認爲用負數表示>>並不能提供與/相同的結果。你可以只用整數,而不用浮點數。 – 2012-01-04 20:45:04

+2

如果你不確定什麼是位移,你可以確定分隔是什麼,而你正在考慮將其中一個替換爲另一個,爲什麼不保存自己,未來你和代碼的未來維護者(可能你,也許不是你)麻煩和分裂? – 2012-01-04 20:45:15

回答

1

它實際上做你想要的int值,但你應該小心邊緣情況,如負數或非常大的數字。

至於浮點數,其內存中的表示並非如此簡單,所以一個簡單的右移將不會受到2

+0

實際上,浮點類型上沒有'>>'運算符。 – phoog 2012-01-04 20:51:09

1

做分割的伎倆這是移位運算符而不是分裂,我們知道,左移將乘以2的數,對於〔實施例

2在基體2是:0010,如果我們移動它的一倍至左它會變成爲4或0100

因此,作爲MSDN說:

如果第一個操作數是int或uint(32位q (第二操作數& 0x1f)給出移位計數。

如果第一個操作數是long或ulong(64位數量),則移位計數由第二個操作數的低6位(第二個操作數& 0x3f)給出。

如果第一個操作數是int或long,則右移是算術移位(高位空位設置爲符號位)。如果第一個操作數是uint或ulong類型,則右移是邏輯移位(高位是零填充)。

+0

但是這些例子使用右移運算符,它確實類似於分割。 – phoog 2012-01-04 20:50:18