Javascript按位运算符混淆

时间:2012-01-20 03:49:17

标签: javascript bitwise-operators

我正在尝试在Javascript中执行一些按位操作,

0xff000000 | 0x00aabbcc

我期望给予我

0xffaabbcc     // == 4289379276;

然而,当运行它时,我得到结果-5588020。我希望这与javascript中的按位操作仅在32位数上运行这一事实有关,但不是这两个数字< = 32bit无论如何?有人能指出我出错的地方以及如何获得理想的结果吗?

我尝试了How to do bitwise AND in javascript on variables that are longer than 32 bit?概述的技术但没有运气。


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

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

(0xff000000 | 0x00aabbcc)>>>0

1 个答案:

答案 0 :(得分:2)

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

4289379276 - 2 ^ 32 = -5588020

我认为这是否足够取决于您尝试对结果做什么。