为什么这个按位运算不起作用?

时间:2015-04-18 00:18:05

标签: java bitwise-operators

好吧这可能是非常愚蠢的事情,但我无法理解为什么这不起作用;

    byte temp = (byte)0x80;
    System.out.println(temp);
    byte holder = (byte)(temp | 0x40);
    System.out.println(holder);

产地:

-128

-64

不应该是按位或开启:

千万

01000000

产量

11000000

或-192?

2 个答案:

答案 0 :(得分:3)

0x80代表128,0x40代表64.如果您打印0x80 | 64,则会输出192.

当您转换为字节128变为-128时,128高于Byte.MAX_VALUE,即127。

因此,您评估的表达式为-128 | 64,而您可能期望128 | 64,并且会产生您的输出-64

答案 1 :(得分:0)

请尝试以这种方式打印出来:

byte b1 = (byte)0x80; String s1 = String.format("%8s", Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0'); System.out.println(s1); byte b2 = (byte)0x40; String s2 = String.format("%8s", Integer.toBinaryString(b2 & 0xFF)).replace(' ', '0'); System.out.println(s2); byte b3 = (byte)(b1 | b2); String s3 = String.format("%8s", Integer.toBinaryString(b3 & 0xFF)).replace(' ', '0'); System.out.println(s3);