Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java移位运算符_Java_Bitwise Operators_Bit Shift - Fatal编程技术网

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,这是您

考虑以下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
,这是您的输出

表示除以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