JavaScript 和 Python 按位或运算给出了不同的结果

标签 javascript python numbers bitwise-or

JS

console.log(1 | 1); // 1
console.log(1 | 0x8); // 9
console.log(1 | 0x80000000); // -2147483647

python

print (1 | 1) # 1
print (1 | 0x8) # 9
print (1 | 0x80000000) # 2147483649

为什么最后一个例子的结果不同?

最佳答案

MDN 中描述了 JavaScript 行为。

The operands of all bitwise operators are converted to signed 32-bit integers in two's complement format, except for zero-fill right shift which results in an unsigned 32-bit integer.

因此,在 JavaScript 中您会得到负数,因为它将该值视为 32 位有符号数。 0x80000000 位是符号位。

上面引用末尾的限定符指出了获得与 Python 相同结果的方法:

console.log((1 | 0x80000000) >>> 0);

>>> 是零填充右移运算符。移动 0 位不会改变值,但会转换为无符号。

Python 整数具有无限精度,因此当它们达到 32 位时不会环绕为负数。

关于JavaScript 和 Python 按位或运算给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60387008/

相关文章:

java - 以分钟为单位计算年数和天数

javascript - 有什么基本的例子可以帮助我理解函数是对象吗?

javascript - 为什么对象的键只是第一个字符?

python - 更新列类型JsonBlob的mysql表行

python - 将列值拆分为一对一映射

Swift 2 使用解析 : could not cast value of type '__NSArrayM' to 'NSNumber'

javascript - javascript 中 isNaN 和 Number.isNaN 的混淆

javascript - ASP.NET MVC3 Ajax.ActionLink - 条件确认对话框

javascript - 在表中启用和禁用 td

python - 如何在输出旁边显示 python 输入代码