javascript和java之间的按位操作有什么不同

javascript和java之间的按位操作有什么不同,javascript,java,bitwise-operators,bitwise-and,Javascript,Java,Bitwise Operators,Bitwise And,我正在做一些从javascript到java的代码转换。当启动某个按位操作时,我发现javascript和java之间的按位操作行为非常不同。我在JVM方面比较有经验,操作对我来说似乎很正常。但是在javascript方面,我有点困惑。我已经检查了所列出的演示对我来说似乎很正常,但我发现了一些情况,并不像我预期的那样 问题: 您能解释一下为什么我附带的代码中的按位操作在javascript和java中如此不同吗 另外,我知道我在javascript方面的知识还不足以在这两种语言之间执行某种代码转

我正在做一些从javascript到java的代码转换。当启动某个按位操作时,我发现javascript和java之间的按位操作行为非常不同。我在JVM方面比较有经验,操作对我来说似乎很正常。但是在javascript方面,我有点困惑。我已经检查了所列出的演示对我来说似乎很正常,但我发现了一些情况,并不像我预期的那样

问题:

  • 您能解释一下为什么我附带的代码中的按位操作在javascript和java中如此不同吗

  • 另外,我知道我在javascript方面的知识还不足以在这两种语言之间执行某种代码转换,是否有任何有用的网站可以帮助我更好地理解javascript中的按位操作或数字数据的数据结构

  • Java代码

    长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
    感谢您的回答,它提供了有用的信息。