Javascript 为什么是4204900352&;4204904447是-90066944吗?
我试图用javascript做一些位操作,但它给出了错误的答案Javascript 为什么是4204900352&;4204904447是-90066944吗?,javascript,bitwise-operators,Javascript,Bitwise Operators,我试图用javascript做一些位操作,但它给出了错误的答案 4204900352 & 4204904447 有没有办法解决这个问题 您的数字被认为是32位有符号整数值时是负数。JavaScript按位操作以32位精度执行,并且这两个值在最高位都有1 您可以使用以下技巧: var x = 4204900352 & 4204904447; if (x < 0) x += Math.pow(2, 32); var x=4204900352&420490447; 如果(x
4204900352 & 4204904447
有没有办法解决这个问题 您的数字被认为是32位有符号整数值时是负数。JavaScript按位操作以32位精度执行,并且这两个值在最高位都有
1
您可以使用以下技巧:
var x = 4204900352 & 4204904447;
if (x < 0) x += Math.pow(2, 32);
var x=4204900352&420490447;
如果(x<0)x+=Math.pow(2,32);
JavaScript按位AND运算符处理有符号32位整数,在您的例子中是-90066944
和-90062849
。结果-90066944
是正确的答案,无法修复
您可以使用无符号位移位运算符将结果强制转换为无符号32位整数,但:
(4204900352 & 4204904447) >>> 0 // 4204900352
当然,它的工作时间也不会超过32位,您需要手工制作一个解决方案(或等待)。什么是正确答案?JS中的正确答案实际上是-90066944python给出4204900352,而answerJavascript没有,但您是对的,正确答案应该是
4204900352
,或者11111 01010100001011000000000000
它们是对相同32位的不同解释,一个无符号和一个有符号2的补码。坚持数字为负数是不准确的,因为它们肯定是正数,但是是64位浮点数而不是32位有符号整数(它们在按位操作期间被强制转换,这使它们为负)。@Frxstrem当用有符号32位整数数学检查时,它们是负的,这就是这里发生的事情。我想我们是一致的。:)为清晰起见进行编辑。不,它们不是负的。JS将它们存储为64位,当它这样做时,两个数字的所有左位都是0。e、 g.第一个数字变成00fa A1 B0 00
。如果它们都有相同的前导位,和的结果是1。从而导致结果以1s的速度将位前导至all。因此,消极。我们想怎么想就怎么想;具有高位设置的32位运算符结果将以负数结束。