Java 位運算


原碼

一個正數的原碼,是按照絕對值大小轉換成的二進制數。
一個負數的原碼,是按照絕對值大小轉換成的二進制數,然后最高位補1。

00000000 00000000 00000000 00000101 是5的原碼。
10000000 00000000 00000000 00000101 是-5的原碼。

反碼

正數的反碼與原碼相同。
負數的反碼為對該數的原碼除符號位外各位取反。

00000000 00000000 00000000 00000101 是5的反碼。
11111111 11111111 11111111 11111010 是-5的反碼。

補碼

正數的補碼與原碼相同。
負數的補碼為對該數的原碼除符號位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111011。

總結

正數的反碼和補碼都與原碼相同。
負數的反碼為對該數的原碼除符號位外各位取反。
負數的補碼為對該數的原碼除符號位外各位取反,然后在最后一位加1。

與運算 &

具體規則為:兩個二進制對應位都為1時,結果為1,否則結果為都0。

int a = 5; // 0000 0000 0000 0000 0000 0000 0000 0101   
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a &= b;   // 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(a);

或運算 |

具體規則為:兩個二進制對應位為0時該位為0,否則為1。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a |= b;   // 0000 0000 0000 0000 0000 0000 0000 0111
System.out.println(a);

異或運算 ^

具體規則為:兩個二進制對應位相同時,結果為0,否則結果為1。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a ^= b;   // 0000 0000 0000 0000 0000 0000 0000 0110
System.out.println(a);

非運算 ~

具體規則為:操作數的第n位為1,那么結果的第n位為0,反之亦然。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = ~a; // 1111 1111 1111 1111 1111 1111 1111 1010
System.out.println(b);

左移 <<

具體規則:左移,低位補0。

public class Test {
  public static void main(String[] args) {
    System.out.println(5<<2);
  }
}
前: 0000 0000 0000 0000 0000 0000 0000 0101
后:0000 0000 0000 0000 0000 0000 0001 0100

右移 >>

具體規則:右移,高位補0。

public class Test {
  public static void main(String[] args) {
    System.out.println(5>>2);
  }
}
前:0000 0000 0000 0000 0000 0000 0000 0101
后:0000 0000 0000 0000 0000 0000 0000 0001

無符號右移 >>>

-5換算成二進制:1111 1111 1111 1111 1111 1111 1111 1011
-5右移3位后結果為-1:1111 1111 1111 1111 1111 1111 1111 1111 // (用1進行補位)
-5無符號右移3位后的結果:0001 1111 1111 1111 1111 1111 1111 1111 // (用0進行補位)

無符號左移 <<<

正數或者負數左移(無符號左移),低位都是用0補。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM