java按位運算子(&、|、~、^) 移位操作符(>> >> )
java按位運算子(操作符)
最近在看原始碼時,發現一些java基礎有些記不清了。今天來回憶,整理一下。
按位運算子是來操作整數基本資料型別中的單個“位元”(bir),即二進位制位,位運算子會對兩個引數中對應的位執行布林代數運算,並最終生成一個結果。
位運算子來源於C語言面向底層的操作,在這種操作中經常需要直接操作硬體,設定硬體暫存器內的二進位制位。Java的設計初衷是為了嵌入電視機機頂盒,所以種面向底層的操作仍被保留了下來。
1、“與”、“位與”(&)
按位“與”操作符,如果兩個數的二進位制,相同位數都是1,則該位結果是1,否則是0.
例1 5&4
5的二進位制是 0000 0000 0000 0101
4的二進位制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0100 轉為十進位制是4。
2、“或”、“位或”(|)
按位“或”操作符,如果兩個數的二進位制,相同位數有一個是1,則該位結果是1,否則是0
例25 | 4
5的二進位制是 0000 0000 0000 0101
4的二進位制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0101 轉為十進位制是5。
3、“異或、“位異或”(^)
按位“異或”操作符,如果兩個數的二進位制,相同位數只有一個是1,則該位結果是1,否則是0
例3 5 ^ 4
5的二進位制是 0000 0000 0000 0101
4的二進位制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0001 轉為十進位制是1
4、“非”、“位非”(~)也稱為取反操作符
按位“非”操作符,屬於一元操作符,只對一個運算元進行操作,(其他按位操作符是二元操作符)。按位“非”生成與輸入位相反的值,——若輸入0,則輸出1,若輸入1,則輸出0。
例4 ~5
5的二進位制是 0000 0000 0000 0101
則~5是 1111 1111 1111 1010 轉為十進位制是 -6。
這裡出現負數,強行插入一波^_^
電腦的的世界中只有0和1,那麼負數怎麼表示呢?
二進位制的正負是從高位看,最高位如果1則是負數,如果是0則是正數。
如果負數單純是把最高位變為1的話,在運算中會出現不是我們想要的值,所以引入了:原碼,反碼,補碼。正數的原碼,反碼,補碼都一樣,負數的反碼是對除了符號位(最高位)對原碼取反,補碼是對反碼+1
負數的二進位制轉化,計算機計算是用的補碼
1、首先取出這個數的原碼的二進位制,
2、然後再求出反碼
3、最後求出補碼
例5 -5
-5的原碼是 1000 0000 0000 0101
求出反碼的是 1111 1111 1111 1010
求出補碼是 1111 1111 1111 1011