Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是4204900352&;4204904447是-90066944吗?_Javascript_Bitwise Operators - Fatal编程技术网

Javascript 为什么是4204900352&;4204904447是-90066944吗?

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

我试图用javascript做一些位操作,但它给出了错误的答案

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位运算符结果将以负数结束。