很简单,真的。是否0xf12345678>>>4
总是应该0x1234567
在 JavaScript 中产生结果?我可以假设这适用于所有浏览器吗?
问问题
84 次
2 回答
1
是的,根据 ECMAScript 5 规范,>>>
操作员执行内部ToUInt32
算法。
请参阅规范的第 11.7.3 节:
- 令 lref 为评估 ShiftExpression 的结果。
- 令 lval 为 GetValue(lref)。
- 令 rref 为 AdditiveExpression 求值的结果。
- 设 rval 为 GetValue(rref)。
- 令 lnum 为 ToUint32(lval)。
- 设 rnum 为 ToUint32(rval)。
- 令 shiftCount 为屏蔽掉除 rnum 的最低有效 5 位以外的所有结果,即计算 rnum & 0x1F。
- 通过 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 回答