2012-11-12 52 views

回答

1

是的,根據ECMAScript 5規範,>>>運營商執行內部ToUInt32算法。

Section 11.7.3 of the spec

  1. 令LREF是評估ShiftExpression的結果。
  2. 讓lval成爲GetValue(lref)。
  3. 讓rref是評估AdditiveExpression的結果。
  4. 設rval爲GetValue(rref)。
  5. 讓lnum成爲ToUint32(lval)。
  6. 讓rnum爲ToUint32(rval)。
  7. 設shiftCount是屏蔽除rnum的最低有效位5之外的所有結果,即計算rnum & 0x1F。
  8. 返回通過shiftCount位執行lnum的零填充右移的結果。空位填充零。結果是 一個無符號的32位整數。

明確指出結果總是32位整數。

>>>運算符通常用於轉換爲32位無符號整數。例如,MDN在他們的墊片中使用它。例如:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility

0

應該是一個可靠的假設。任何JS解釋器在計算任何操作之前都會將0xf12345678讀作單個操作數。如果你想要安全,爲什麼不要(0xf12345678)>>>4

在這裏的問題的一些細節:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators

位運算符把操作數爲32位(零 和1),而不是十進制,十六進制或八進制數字的序列。例如,對於 示例,十進制數字9的二進制表示形式爲1001. 按位運算符對這些二進制 表示形式執行其操作,但它們會返回標準的JavaScript數值。

相關問題