版權聲明一:本文為博主原創文章,轉載請附上原文出處鏈接和本聲明。
版權聲明二:本網站的所有作品會及時更新,歡迎大家閱讀后發表評論,以利作品的完善。
版權聲明三:對不遵守本聲明或其他違法、惡意使用本網內容者,保留追究其法律責任的權利。
本文鏈接:https://home.cnblogs.com/u/zak24/
Java中的「與運算 & 」 規則 :都為1時才為1,否則為0
- 即:兩位同時為“1”,結果才為“1”,否則為0
例如:
public static void main(String args[]) {
System.out.println( 7 & 9);
/*
* 7的二進制
* 7/2=3...1
* 3/2=1...1
* 1/2=0...1
* 直到商為0,將余數倒過來就是111
* 於是得數是111
*/
/*
* 9的二進制
* 9/2=4...1
* 4/2=2...0
* 2/2=1...0
* 1/2=0...1
* 於是得數是1001
*/
/*
* 7二進制 0111
* 9二進制 1001
* ------------
* 0001 ==1
*/
}
Java中的「或運算 | 」 規則 :有一個為1,則為1
- 即 :參加運算的兩個對象只要有一個為1,其值為1。
例如:
public static void main(String args[]){
System.out.println(7 | 9);
/*
* 7二進制 0111
* 9二進制 1001
* -----------
* 1111 == 15
* */
}
Java中的「異或運算 ^ 」 規則 :都不同時,為1
- 即:參加運算的兩個對象,如果兩個相應位為“異”(值不同),則該位結果為1,否則為0。
例如:
public static void main(String args[]){
System.out.println( 7 ^ 9);
/*
* 7二進制 0111
* 9二進制 1001
* ------------
* 1110 == 14
* */
}
Java中的「取反運算 ~ 」 規則 :按位取反
- 即:對一個二進制數按位取反,即將1變0,0變1。
- 按位取反運算符“~”的原理:是將內存中的補碼按位取反(包括符號位)。
-
二進制數在內存中是以補碼的形式存放的。
-
補碼首位是符號位,0表示此數為正數,1表示此數為負數。
-
正數的補碼、反碼,都是其本身。
-
負數的反碼是:符號位為1,其余各位求反,但末位不加1 。
-
負數的補碼是:符號位不變,其余各位求反,末位加1 。
-
所有的取反操作、加1、減1操作,都在有效位進行。
-
例如:正數
-
正數9(二進制為:1001)在內存中存儲為01001,必須補上符號位(開頭的數字0為符號位)。
-
轉二進制:0 1001
-
計算補碼:0 1001
-
按位取反:1 0110 (變成補碼,這明顯變成了一個負數補碼,因為符號位是1)
-
補碼減1 :1 0101
-
在取反 :1 1010
-
符號位為1是負數,即-10
-
例如:負數
-
負數-1(二進制為:0001)在內存中存儲為10001,必須補上符號位(開頭的數字1為符號位)。
-
-1的反碼為11110
-
-1的補碼為11111 (也可以理解為:反碼末位加上1就是補碼)
-
~-1的取反 00000
-
~-1結果為:0
-
例1:
package test2;
public class CeshiQuFan {
public static void main(String args[]){
System.out.println(~7);//正數
/*
* 7二進制 0000 0000 0000 0000 0000 0000 0000 0111
* 0000 0000 0000 0000 0000 0000 0000 0111 反碼
* 0000 0000 0000 0000 0000 0000 0000 0111 補碼
* 1000 0000 0000 0000 0000 0000 0000 1000 得到正數的補碼之后進行取反 (這時得到的是負數)符號位為: 1
* 所以~7的值為:-8
*/
}
}
例2:
package test2;
public class CeshiQuFan {
public static void main(String args[]){
System.out.println(~-1);//負數
/*
* -1二進制 1000 0000 0000 0000 0000 0000 0000 0001
* 1000 0000 0000 0000 0000 0000 0000 1110 反碼(負數的反碼是:符號位為1,其余各位求反,但末位不加1。)
* 1000 0000 0000 0000 0000 0000 0000 1111 補碼(負數的補碼是:符號位不變,其余各位求反,末位加1 。)
* 0000 0000 0000 0000 0000 0000 0000 0000 得到負數的補碼之后進行取反 (這時得到的是正數) 符號位為: 0
* 所以~-1的值為:0
*/
}
}