Kil*_*roy 2 javascript unsigned bit-manipulation integer-overflow bit-shift
这是假的:
(0xffffffff << 31 << 1) === (0xffffffff << 32)
Run Code Online (Sandbox Code Playgroud)
看起来应该是真的.添加>>> 0
任何地方都不会改变这一点
为什么这样,我怎样才能正确编写处理的代码<< 32
?
Jon*_*eet 10
移位运算符总是有效地具有0-31范围内的右操作数.
来自Mozilla文档:
移位运算符以big-endian顺序将其操作数转换为32位整数,并返回与左操作数相同类型的结果.右操作数应小于32,但如果不是,则仅使用低5位.
或者来自ECMAscript 5标准:
生产ShiftExpression:ShiftExpression << AdditiveExpression的计算方法如下:
- 让lref成为评估ShiftExpression的结果.
- 设lval为GetValue(lref).
- 让rref成为评估AdditiveExpression的结果.
- 设rval为GetValue(rref).
- 让lnum成为ToInt32(lval).
- 让rnum成为ToUint32(rval).
- 设*shiftCount是屏蔽除> rnum的最低有效5位之外的所有位的结果,即计算rnum和0x1F.
- 通过shiftCount位返回左移lnum的结果.结果是带符号的32位整数.
(同样适用于其他班次运营商.)
我并不完全清楚为什么会这样,但Java和C#对于32位整数类型的工作方式相同.(对于64位整数类型,操作数的范围为0-63.)例如,参见JLS 15.19.
我的猜测是这在普通的处理器平台上是有效的,但我没有证据证明......
归档时间: |
|
查看次数: |
156 次 |
最近记录: |