javascript和java之间的按位操作有什么不同
我正在做一些从javascript到java的代码转换。当启动某个按位操作时,我发现javascript和java之间的按位操作行为非常不同。我在JVM方面比较有经验,操作对我来说似乎很正常。但是在javascript方面,我有点困惑。我已经检查了所列出的演示对我来说似乎很正常,但我发现了一些情况,并不像我预期的那样 问题:javascript和java之间的按位操作有什么不同,javascript,java,bitwise-operators,bitwise-and,Javascript,Java,Bitwise Operators,Bitwise And,我正在做一些从javascript到java的代码转换。当启动某个按位操作时,我发现javascript和java之间的按位操作行为非常不同。我在JVM方面比较有经验,操作对我来说似乎很正常。但是在javascript方面,我有点困惑。我已经检查了所列出的演示对我来说似乎很正常,但我发现了一些情况,并不像我预期的那样 问题: 您能解释一下为什么我附带的代码中的按位操作在javascript和java中如此不同吗 另外,我知道我在javascript方面的知识还不足以在这两种语言之间执行某种代码转
长x=4023233417L;
System.out.println(String.format(“%d=>%s”,x,Long.toBinaryString(x));
长y=2562383102L;
System.out.println(String.format(“%d=>%s”,y,Long.toBinaryString(y));
长期结果=x&y;
System.out.println(String.format(“%d=>%s”,result,Long.tobinarysting(result));
//输出
//4023233417 => 11101111110011011010101110001001
//2562383102 => 10011000101110101101110011111110
//2290649224 => 10001000100010001000100010001000
Javascript代码
x=4023233417
控制台日志(x.toString(2))
y=2562383102
控制台日志(y.toString(2))
结果=x&y
console.log(result.toString(2))
//输出
//11101111110011011010101110001001
//10011000101110101101110011111110
//-1110111011101110111011101111000
我希望x&y应该是“10001000”
但在javascript代码中,结果是:
“-1110111011110111011110111101111000”在javascript中,只能对32位数字执行按位操作。甚至javascript也使用IEEE 754浮点标准来表示数字。可对32位数字执行按位操作。因此,其余的位将被忽略 若要将任何数字转换为其32位表示形式,请使用它进行编号| 0。当javascript读取
x&y
时,它会考虑x和y的32位,并默默地忽略其他位。在本例中,按位执行的数字是x=-271733879
和y=-1732584194
Javascript中按位操作的安全范围是Math.pow(-2,31)
(-2147483648,约-21亿)到Math.pow(2,32)-1
(2147483647,约+21亿)
x=4023233417;
控制台日志(x.toString(2))
y=2562383102;
console.log(y.toString(2));
结果=x&y;
console.log(result.toString(2))//-1110111011101110111011101111000
x=x | 0//-271733879
y=y | 0//-1732584194
console.log(“32位x:+x”);
console.log(“32位y:+y”);
结果=x&y;
console.log(result.toString(2))//-1110111101110111101110111101110111111000
感谢您的回答,它提供了有用的信息。