|=
關於 |= 運算符:|= 運算符和 += 這一類的運算符一樣,拆解開就是 a = a | b;
代碼如下:
public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a |= b; // 0000 00111 System.out.println(a); }
具體規則為:兩個二進制對應位為0時該位為0,否則為1。拿5的二進制 0000 0101 和 3的二進制 0000 0011 進行|運算,后三位的的對應位都不是同時等於0,所以最終結果為 0000 0111 也就是7的二進制。
&=
&= 和 |= 基本是一樣的,只不過對於比較同位方式不同。
代碼如下:
public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a &= b; // 0000 0001 System.out.println(a); }
具體規則為:兩個二進制對應位都為1時,結果為1,否則結果為都0。拿5的二進制 0000 0101 和 3的二進制 0000 0011 進行&運算,只有最后一位都為1,則最終結果為 0000 0001 也就是1的二進制。
^=
運算規則還是同上。
代碼如下:
public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a ^= b; // 0000 0110 System.out.println(a); }
具體規則為:兩個二進制對應位相同時,結果為0,否則結果為1。拿5的二進制 0000 0101 和 3的二進制 0000 0011 進行^運算,1-5位對應位都是0所以1-5位都為0,第8位都為1所以第8位也為0,其他的對應位都不相等所以為1,則最終結果為 0000 0110 也就是6的二進制。
總結:
|=:兩個二進制對應位都為0時,結果等於0,否則結果等於1;
&=:兩個二進制的對應位都為1時,結果為1,否則結果等於0;
^=:兩個二進制的對應位相同,結果為0,否則結果為1。