Javascript 按位运算符混淆

标签 javascript bitwise-operators

我正在尝试在 Javascript 中执行一些按位运算,

0xff000000 | 0x00aabbcc

我希望给我什么

0xffaabbcc     // == 4289379276;

但是当运行这个时,我得到结果-5588020。我预计这与 javascript 中的按位运算仅对 32 位数字进行操作有关,但是这两个数字不是 <= 32 位吗?有人可以指出我哪里出了问题以及如何获得想要的结果吗?

我已经尝试过 How to do bitwise AND in javascript on variables that are longer than 32 bit? 中概述的技术运气不好。

<小时/>

无法发布我自己的答案,因此将其放在这里供其他人发布...

谢谢大家的评论。结果答案是Javascript bitwise operator confusion涵盖了这一点。事实证明,JavaScript 对 32 位有符号整数进行按位运算。我的|上面的操作大于最大可能范围,因此结果以有符号整数的形式返回。解决方案是将输出右移 0,这显然告诉 JS 再次将其视为无符号。

(0xff000000 | 0x00aabbcc)>>>0

最佳答案

您得到了正确的十六进制值,它只是不是您正在寻找的整数值。

4289379276 - 2^32 = -5588020

我想这是否足够取决于您想要对结果做什么。

关于Javascript 按位运算符混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936523/

相关文章:

javascript - .load() 之后的 DOM 操作

Javascript 进度条无法正确加载

javascript - x >>> 0 是做什么的?

用C转换子网掩码前缀

c++ - 按位运算符,不是 vs xor 在分支中使用

javascript - 我如何使用 Reactjs 模板?

javascript - 如何创建用作过滤器的段落

javascript - Rails 3 远程表单不传递参数

c - 在 C 中将按位值显示为整数

bitwise-operators - 在 Nimrod 中,按位运算的语法是什么?