简单的问题:为什么如果我用Java应用无符号右移,以字节变量(短为好)它威胁它作为INT:无符号右移
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
控制台输出:
-1
2147483647
2147483647
简单的问题:为什么如果我用Java应用无符号右移,以字节变量(短为好)它威胁它作为INT:无符号右移
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
控制台输出:
-1
2147483647
2147483647
一个人只能在Java中使用ints和long的移位运算符(就像所有其他数字运算符一样),因此在移位之前该字节会自动转换为int。这同样发生在算术右移,但-1 >> 2
是-1,无论-1
是什么类型,因为二进制表示111...111
在算术上向右移动仍然是111...111
,而逻辑上移位它变成011...111
,即移位类型的最大值。
PS:算术移位是有符号移位,逻辑移位是无符号移位。
感谢您的澄清。不知道。 –
@MarkoTopolnik完成。 – Njol
它与几乎所有运算符一样被视为int,而不仅仅是未签名的右移。 – Ingo