Java中位運算符包括邏輯右移和算術右移兩種,它們分別用于將操作數的每一位按照指定規則向右移動指定的位數。
// 邏輯右移運算符 >>int a = 0b1010; // 二進制表示的數字10 int b = a >>2; // a右移2位得到2 System.out.println(b); // 輸出2
邏輯右移運算符將操作數的二進制表示向右移動指定的位數,并用0填充左側空出的位。這意味著對于正數,邏輯右移的結果與算術右移的結果相同,但對于負數而言,邏輯右移的結果與算術右移的結果不同。因為負數的二進制補碼表示包含了符號位,它在進行邏輯右移時也會被移動,這可能導致符號位變為1,使得邏輯右移的結果變成一個正數。
// 算術右移運算符 >>int c = -0b1010; // 二進制表示的數字-10 int d = c >>2; // c右移2位得到-3 System.out.println(d); // 輸出-3
算術右移運算符用符號位填充空出的位,因此對于正數和負數來說,算術右移的結果都可以保留符號位。如果符號位為1,表示這個數為負數,那么算術右移時就會在左側空出的位上填充1。