0

很简单,真的。是否0xf12345678>>>4总是应该0x1234567在 JavaScript 中产生结果?我可以假设这适用于所有浏览器吗?

4

2 回答 2

1

是的,根据 ECMAScript 5 规范,>>>操作员执行内部ToUInt32算法。

请参阅规范的第 11.7.3 节

  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

于 2012-11-12T05:46:56.910 回答
0

应该是一个可靠的假设。0xf12345678任何 JS 解释器都会在计算任何操作之前将其作为单个操作数读取。如果你想安全,为什么不(0xf12345678)>>>4呢?

关于这里问题的一些细节:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators

按位运算符将其操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示为 1001。按位运算符对这种二进制表示执行操作,但它们返回标准的 JavaScript 数值。

于 2012-11-12T05:46:47.533 回答