javascript和java之间的按位运算有什么不同

问题描述 投票:0回答:1

我正在执行从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”

javascript java bitwise-operators bitwise-and
1个回答
0
投票

在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
© www.soinside.com 2019 - 2024. All rights reserved.