位掩码和javascript的问题



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

var a = 0;
a |= (1 << 31);
alert(a);
a |= (1 << 30);
alert(a);

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

应该是3221225472吗?

谢谢,

从技术上讲,这没有什么问题,因为它将转换为32位有符号整型,因此预计会出现负数。

基本上,前导位表示"负或正",所以当你翻转它(与1<<31)时,你得到一个负数。

你的位掩码仍然会像你期望的那样在上工作,直到 32位。JavaScript中不能超过32位掩码

var a = 0;
var b;
a |= (1 << 31);
b = a
a |= (1 << 30);
b += a
alert(b);

在上面的例子中,b将以-3221225472结束。

最新更新