在 JavaScript 中右移数字有时会产生负数。这背后的原因是什么?可以减轻这种情况吗?
const now = 1562143596806 // UNIX timestamp in milliseconds
console.log(now >> 8) // -4783199
最佳答案
使用zero-fill right shift运算符 (>>>
) 始终获得正结果:
const now = 1562143596806 // UNIX timestamp in milliseconds
console.log(now >>> 8)
>>
运算符返回数字的原因是,该数字最初在内部表示为 64-bit floating point number :
10110101110110111000000111010000100000110
位移操作首先将操作数转换为32位整数。它通过仅保留 32 个最低有效位并丢弃其余部分来实现此目的:
10110111000000111010000100000110
然后它将按指定的位数移动,同时保持符号,即从左侧移入 8 1
位:
11111111101101110000001110100001
转换回十进制,结果是:
-4783199
关于javascript - 为什么正数右移有时会得到负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56866365/