Java移位运算符
考虑以下Java代码:Java移位运算符,java,bitwise-operators,bit-shift,Java,Bitwise Operators,Bit Shift,考虑以下Java代码: byte a = -64; System.out.println(a << 1); 字节a=-64; System.out.println(移位运算符中的符号位被忽略。因此1000000>>哪个符号位也移位了。 11000000>>1==10100000和11000000>>1==01100000 10000000 is -128 10000001 is -127 10000010 is -126 ... 所以10000000不是0,而是-128,这是您
byte a = -64;
System.out.println(a << 1);
字节a=-64;
System.out.println(移位运算符中的符号位被忽略。因此1000000>>哪个符号位也移位了。
11000000>>1==10100000和11000000>>1==01100000
10000000 is -128
10000001 is -127
10000010 is -126
...
所以10000000
不是0
,而是-128
,这是您的输出
表示除以2
和,在移位操作中,不考虑符号位。
< P>在两个补中,MSB不只是符号位,你在思考“补”可能在8位二补, 10000000=0x80=-128二者的-128补码表示为10000000,因此您的结果是正确的。我想知道。
这个程序
System.out.println(Integer.toBinaryString(-64));
System.out.println(Integer.toBinaryString(-64 << 1));
System.out.println("-64 << 1 = " + (-64 << 1));
System.out.println(Integer.toBinaryString(-64));
System.out.println(Integer.toBinaryString(-64)如果忽略符号位,结果如何是有符号(负数)?我不认为“忽略”是一个非常正确的词,但重点是10000000==-128
,而不是你所想的0
。但是机器似乎在考虑符号位,因为它将符号数字作为输出?!请解释更多关于转换10000000=0x80=-128的信息(我不理解0x80):)@杜克小姐读过。有没有什么直接的算术方法可以把二的补码转换成十进制?你是说inti=Integer.parseInt(“10000000”,2);
?如果你想表达-128
为什么要用这种奇怪的方式写它?@Imray你可能需要写x
11111111111111111111111111000000
11111111111111111111111110000000
-64 << 1 = -128