javascript - 为什么正数右移有时会得到负数?

标签 javascript binary bit-manipulation bitwise-operators

在 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/

相关文章:

c++ - 反转十六进制字符串的第 7 位 C++

在 C 上按位操作按范围克隆位

C 宏测试设置范围内的位

javascript - 这段 Javascript 代码有什么作用?

javascript - Sequelize 多对多自关联

c - c 中的二进制数和字符串表示

java - 在java中创建一个二进制文件

java - <<=运算符在Java中是什么意思?

javascript - 检查不存在的变量时控制流模式

Javascript float 加法