概要
- 概述
- 與運算應用
- 應用
- 和十六進制數進行位運算
概述
各個運算符的表示:&(與),|(或),^(異或),~(非/取反)
a | b | ~a | a&b | a|b | a^b |
1 | 1 | 1 | 1 | ||
1 | 1 | 1 | 1 | ||
1 |
- 與:都為1結果為1
- 或:有一個為1結果為1
- 異或:二者不同時結果為1, 其中任意值與0異或值不變,兩個相同的數異或為0
與運算應用
一個數與0相與為舍去, 與1相與為保留.
例1:1101 想要變為1100,則舍去後兩位.
解:1101 & 1100 = 1100
例2:1111 想要變為1010,則将第2,4位舍去,将1,3位保留
解:1111 & 1010 = 1010
應用
-
判斷該數為奇數還是偶數
偶數 : (num & 1) == 0
奇數 : (num & 1) == 1
和十六進制數進行位運算
看到有些算法求解中,某些二進制數與十六進制數進行位運算該如何了解呢?
一些算法中應用16進制為,其實他們的16進制轉換為二進制位都是有規律的.并不是憑空出現的,大部分為了友善特殊二進制的表示.
舉個栗子友善了解:
需求:一個數想取出二進制1 的偶數位
想要去偶數位,隻需保留偶數位,舍去奇數位即可.
故将該數的偶數位和1相與,奇數位和0相與即可.
如 3427 的二進制為 : 1101 0110 0011
&1010 1010 1010
=1000 0010 0010
1000 0010 0010為所求的值.
隻需和1010 1010 1010相與即可.
-
在JDK1.8之後支援二進制的輸入.
格式為:int bin = 0b1001_1111_0000;// 其中的下劃線的應用是為了更好的閱讀
public class BinInputTest {
public static void main(String[] args) {
int bin = 0b1001_1111;
System.out.println(bin);
System.out.println(0b1111_1111);
}
}
輸出:
159
255 ↩︎