0

我不确定我是否做错了什么,但我似乎无法让这个简单的 javascript 工作:

var a = 0;

a |= (1 << 31);

alert(a);

a |= (1 << 30);

alert(a);

你可以在这里看到它 http://jsfiddle.net/qPEVk/

不应该是 3221225472 吗?

谢谢,

4

2 回答 2

4

这在技术上没有任何问题,并且预计会出现负数,因为它正在转换为 32 位有符号整数。

基本上,前导位表示“负数或正数”,因此当您翻转它(使用1<<31)时,您会得到一个负数。

您的位掩码在最多32 位时仍将完全按照您的预期工作。JavaScript 中的位掩码不能超过 32 位。

于 2011-04-18T16:40:32.723 回答
0
var a = 0;
var b;
a |= (1 << 31);
b = a
a |= (1 << 30);
b += a
alert(b);

在上述情况下,b 将最终为 -3221225472。

于 2011-04-18T16:43:02.633 回答