我一直在尋找在F#文檔上按位老年退休金計劃:爲什麼F#按位操作符爲符號類型填充1?
按位向右移位運算符。 結果是第一個操作數,其位 右移了第二個操作數的位數 。比特移位 最不重要的位置不是 旋轉爲最顯着的 的位置。對於無符號類型,最高有效位用 填充。對於有符號類型,最重要的位填充1。第二個參數的類型是 int32。
與C++語言相比,這種設計選擇背後的動機是什麼(也可能是C),MSB是用零填充的?例如:
int mask = -2147483648 >> 1; // C++ code
其中-2147483648 =
10000000 00000000 00000000 00000000
和掩碼等於1073741824
其中1073741824 =
01000000 00000000 00000000 00000000
現在,如果你在F#編寫相同的代碼(或C#),這確實會給MSB填充一個,你會得到-1073741824。
其中-1073741824 =
11000000 00000000 00000000 00000000
在C和C++中,移位負值的結果未在標準中定義。 – 2010-09-29 21:45:44
@Oli:啊,我明白了,所以這就是原因 – Stringer 2010-09-29 21:48:39
順便說一下,這個引用聽起來有點奇怪。當然,它應該說「對於**負值**,最重要的位填充了」? – 2010-09-29 21:51:51