簡單的問題:爲什麼如果我用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