Java基礎(chǔ)-位運算符回顧

本文為 Crocutax 原創(chuàng),轉(zhuǎn)載請注明出處 http://www.crocutax.com

擼代碼時間越長,越體會到的基礎(chǔ)知識的重要性,研究原理越多,越感覺到數(shù)據(jù)結(jié)構(gòu)和算法的重要性。這些東西在日常的業(yè)務(wù)代碼中體會不是很明顯,但是一旦稍微往深了研究,立刻就能發(fā)現(xiàn)自己不足。

今天在看源碼的時候,發(fā)現(xiàn)居然忘記了位運算符是怎么玩的了,趕緊回顧了一下,順便寫個筆記記錄一下,加深下印象。

位運算符主要針對二進制數(shù),包括以下幾種:

  • & 與運算符
  • | 或運算符
  • ^ 異或運算符
  • ~ 非運算符

& 與運算符

規(guī)則:兩個二進數(shù)對應(yīng)bit位上的數(shù)都為1時,值為1,否則為0.類似于求1的交集.

例如:
128的二進制表示:00000000 00000000 00000000 10000000
129的二進制表示:00000000 00000000 00000000 10000001
128&129的結(jié)果 :00000000 00000000 00000000 10000000 (十進制值為 128)

| 或運算符

規(guī)則:兩個二進數(shù)對應(yīng)bit位上的數(shù)只要有一個為1,則值為1,否則為0.類似于求1的并集.

例如:
128的二進制表示:00000000 00000000 00000000 10000000
129的二進制表示:00000000 00000000 00000000 10000001
128 | 129的結(jié)果 :00000000 00000000 00000000 10000001 (十進制值為 129)

^ 異或運算符

規(guī)則:兩個二進數(shù)對應(yīng)bit位上的數(shù),相同則為0,不同則為1.

例如:
128的二進制表示:00000000 00000000 00000000 10000000
129的二進制表示:00000000 00000000 00000000 10000001
128 ^ 129的結(jié)果:00000000 00000000 00000000 00000001 (十進制值為 1)

~ 非運算符

規(guī)則:如果該bit位上數(shù)值是0,則為1;如果是1,則為0.也就是取反運算.

例如:
129的二進制表示:00000000 00000000 00000000 10000001
~129的計算結(jié)果 :11111111 11111111 11111111 01111110 (注意此時仍為補碼)
根據(jù)補碼求反碼 : 11111111 11111111 11111111 01111101
根據(jù)反碼求原碼 : 10000000 00000000 00000000 10000010 (十進制值為 -130)

取反公式: ~(x) = -1*(x+1);

例: 6取反=-7 ; 9取反=-10 ; 129取反=-130

代碼測試

public class Test {
    public static void main(String[] args) {
        int a = 128;
        int b = 129;
        System.out.println("128 & 129: "+(128 & 129));
        System.out.println("128 | 129: "+(128 | 129));
        System.out.println("128 ^ 129: "+(128 ^ 129));
        System.out.println("~129 : "+(~129));
    }
}

Log輸出:

128 & 129: 128
128 | 129: 129
128 ^ 129: 1
~129 : -130
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容