Java中的二进制

最后编辑于 2019-05-15

Java SE 7之后可以使用二进制来定义byte,short,int,long这些整型变量。要使用二进制来表示整形,需要在数字开头带上0b或者0B,如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 一个8位的 `byte` 变量:
byte aByte = (byte)0b00100001;

// 一个16位的 `short` 变量:
short aShort = (short)0b1010000101000101;

// 一些32位的 `int` 变量:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // B可以是大写也可以是小写

// 一个64位的 `long` 变量 注意后缀"L":
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

使用二进制可以比十六进制和十进制更明显的观察到数据间的关系:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public static final int[] phases = {
  0b00110001,
  0b01100010,
  0b11000100,
  0b10001001,
  0b00010011,
  0b00100110,
  0b01001100,
  0b10011000
}  //二进制

public static final int[] phases = {
    0x31, 0x62, 0xC4, 0x89, 0x13, 0x26, 0x4C, 0x98
}  //十六进制

还可以使用Integer.toBinaryString(int x)获得x转化为二进制格式后的字符串

1
String s = Integer.toBinaryString(4)	//s的内容为"100"

Java中二进制的异或运算:

Java中可以通过^运算符进行两个数之间的异或运算,它会先将数字自动转化为二进制格式再进行异或运算,然后将二进制数字转回十进制格式

System.out.print(4 ^ 1); //返回5,即先将4和1转换为 0100 和 0001,异或得 0101,转换回十进制得到5

可以使用Integer.bitCount(int x ^ int y)统计 x 和 y 异或得到的二进制格式数字中1的数量

参考:Binary Literals - Java SE Documentation