版權聲明一:本文爲博主原創文章,轉載請附上原文出處連接和本聲明。
版權聲明二:本網站的全部做品會及時更新,歡迎你們閱讀後發表評論,以利做品的完善。
版權聲明三:對不遵照本聲明或其餘違法、惡意使用本網內容者,保留追究其法律責任的權利。
本文連接:https://home.cnblogs.com/u/zak24/java
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
*/
}
public static void main(String args[]){
System.out.println(7 | 9);
/*
* 7二進制 0111
* 9二進制 1001
* -----------
* 1111 == 15
* */
}
public static void main(String args[]){
System.out.println( 7 ^ 9);
/*
* 7二進制 0111
* 9二進制 1001
* ------------
* 1110 == 14
* */
}
二進制數在內存中是以補碼的形式存放的。網站
補碼首位是符號位,0表示此數爲正數,1表示此數爲負數。spa
正數的補碼、反碼,都是其自己。code
負數的反碼是:符號位爲1,其他各位求反,但末位不加1 。對象
負數的補碼是:符號位不變,其他各位求反,末位加1 。blog
全部的取反操做、加一、減1操做,都在有效位進行。內存
例如:正數it
正數9(二進制爲:1001)在內存中存儲爲01001,必須補上符號位(開頭的數字0爲符號位)。io
轉二進制:0 1001function
計算補碼: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
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
*/
}
}
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 */ }}