我正在尝试在 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/