我正在做一些从javascript到Java的代码转换。当启动一些按位运算的过程时,我发现javascript和java之间的按位运算的行为是如此不同。我在JVM方面经验比较丰富,对于我来说,该操作似乎很正常。但是在javascript方面,我有点困惑。我已经检查了MDN on mozilla个列出的演示对我来说似乎是正常的,但是我发现了一些情况,并非我所期望的那样。
问题:
-
您能帮助解释为什么我所附加的代码中的按位运算符&在JavaScript和Java中如此不同的原因吗?
-
此外,我知道我对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”