JavaScript和Java之间按位运算有何不同

我正在做一些从javascript到Java的代码转换。当启动一些按位运算的过程时,我发现javascript和java之间的按位运算的行为是如此不同。我在JVM方面经验比较丰富,对于我来说,该操作似乎很正常。但是在javascript方面,我有点困惑。我已经检查了MDN on mozilla个列出的演示对我来说似乎是正常的,但是我发现了一些情况,并非我所期望的那样。

问题:

  1. 您能帮助解释为什么我所附加的代码中的按位运算符&在JavaScript和Java中如此不同的原因吗?

  2. 此外,我知道我对javascript的了解不足以让我在这两种语言之间执行某种代码转换,是否有任何有用的网站可以帮助我更好地了解按位运算或JavaScript中数字数据的数据结构?

Java代码

        Long x = 4023233417L;
        System.out.println(String.format("%d => %s",x,Long.toBinaryString(x)));
        Long y = 2562383102L;
        System.out.println(String.format("%d => %s",y,Long.toBinaryString(y)));
        Long result = x & y;
        System.out.println(String.format("%d => %s",result,Long.toBinaryString(result)));

        //Output
        //4023233417 => 11101111110011011010101110001001
        //2562383102 => 10011000101110101101110011111110
        //2290649224 => 10001000100010001000100010001000

JavaScript代码

x= 4023233417
console.log(x.toString(2))
y = 2562383102
console.log(y.toString(2))
result = x & y
console.log(result.toString(2))
//Output
//11101111110011011010101110001001
//10011000101110101101110011111110
//-1110111011101110111011101111000

我希望x和y应该为“ 100010001000100010001000100010001000”。

但是在javascript代码中,结果是:  “ -1110111011101110111011101111000”

wangke1836 回答:JavaScript和Java之间按位运算有何不同

在javascript中,您只能对32位数字执行按位运算。甚至JavaScript也使用IEEE 754浮点标准来表示数字。可以对32位数字执行按位运算。因此,其余的位将被忽略。

要将任何数字转换为其32位表示形式,请与number | 0一起使用。当javascript读取x & y时,它将考虑x和y的32位,并忽略其他位。对于您而言,按位执行的数字是x = -271733879y = -1732584194

JavaScript中按位操作的安全范围是Math.pow(-2,31)(-2147483648,约-21亿)至Math.pow(2,32)-1(2147483647,约+21亿)。

x= 4023233417;
console.log(x.toString(2))
y = 2562383102 ;
console.log(y.toString(2));

result = x & y;

console.log(result.toString(2)); //-1110111011101110111011101111000

x = x | 0; //-271733879
y = y | 0; //-1732584194
console.log("32 bit x: " + x);
console.log("32 bit y: " + y);
result = x & y;

console.log(result.toString(2)); //-1110111011101110111011101111000

本文链接:https://www.f2er.com/3130387.html

大家都在问