Java篇—取反(~)操作符的應用及理解

話不多說,先給大家上一個代碼:

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;
        System.out.println(a+~b);    
    }
}

運行結果是多少?    5?  15?

實踐是檢驗真理的唯一標準。上述代碼的真實輸出如下:

驚訝嗎?下來由筆者給大家解惑:

理解取反操作符(~)要先了解的理論:

1.在計算機中,所有數據的表示方式都是以補碼的方式存在;

2.正數:符號位爲0,原碼,反碼,補碼相同;

3.負數:符號位爲1,補碼 = 反碼 + 1。

正數取反解析:

step 1:先求得該數的原碼;

step 2:原碼取反得到答案原碼;

step 3:答案原碼轉爲補碼,最後化爲數值。

負數取反解析:

step 1:先求得該數的原碼;

step 2:再求得該數的補碼;

step 3:補碼取反得到答案補碼,最後化爲數值。

舉例說明:

(1)、~5 = -6過程解析

step 1:表示5的原碼

5的原碼爲:00000000 00000000 00000000 00000101。

step 2:對5的原碼取反

得到答案的原碼:11111111 11111111 11111111 11111010

step 3:將答案的原碼轉成補碼

通過原碼得到反碼:10000000 00000000 00000000 00000101

補碼 = 反碼 + 1:

答案的補碼爲:10000000 00000000 00000000 00000110

得到值:-6

前文中的答案4就是依此而來,10 + ~5 即爲 10 + (-6)= 4。

(2)、~(-3) = 2過程解析

step 1:表示-3

-3的原碼:10000000 00000000 00000000 00000011

-3的反碼:11111111 11111111 11111111 11111100

-3的補碼 = 反碼 + 1:11111111 11111111 11111111 11111101

step 2:對-3的補碼取反操作

得到答案的補碼:00000000 00000000 00000000 00000010

因爲首位,即符號位爲0,所以是正數,原碼 = 反碼 = 補碼

因此答案是2。

通過上述分析,小夥伴們的福利來了~

 

取反操作符(~)結論總結:

當n爲正數時,~(n) = -(n+1)

當n爲負數時,~(-n) = n - 1,忽略負號

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章