好吧这可能是非常愚蠢的事情,但我无法理解为什么这不起作用;
byte temp = (byte)0x80;
System.out.println(temp);
byte holder = (byte)(temp | 0x40);
System.out.println(holder);
产地:
-128
-64
不应该是按位或开启:
千万
01000000
产量
11000000
或-192?
答案 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);