概要
- 概述
- 与运算应用
- 应用
- 和十六进制数进行位运算
概述
各个运算符的表示:&(与),|(或),^(异或),~(非/取反)
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 ↩︎