说明
这里主要就是研究一下关于位计算的一些案例,所有的举例参数都使用int来操作,结果输出也是如此
正文
十进制转换二进制方法
private String DecimalToBinary(int decimal) {
return Integer.toBinaryString(decimal);
}
<< 左位移
a << b : 表示将一个二进制的数字a向左移动b位(在末尾追加b个0),相当于 a × Math.pow(2, b)
public void Test_004() {
int a = 10;
int b = 5;
System.out.println(a);
System.out.println(a << b);
System.out.println(a * Math.pow(2, b));
System.out.println(DecimalToBinary(a));
System.out.println(DecimalToBinary(a << b));
}
输出:
10
320
320.0
1010
101000000
>> 右位移
a << b : 表示将一个二进制的数字a向右移动b位(即从末尾开始删除b位),相当于 a / Math.pow(2, b)。
如果a转化为二进制的长度小于b位,则值为0
public void Test_004() {
int a = 10;
int b = 5;
System.out.println(a);
System.out.println(a >> b);
System.out.println(a / Math.pow(2, b));
System.out.println(DecimalToBinary(a));
System.out.println(DecimalToBinary(a >> b));
}
结果:
10
0
0.3125
1010
0
public void Test_004() {
int a = 6431;
int b = 5;
System.out.println(a);
System.out.println(a >> b);
System.out.println(a / Math.pow(2, b));
System.out.println(DecimalToBinary(a));
System.out.println(DecimalToBinary(a >> b));
}
结果:
6431
200
200.96875
1100100011111
11001000
| 或运算
举个例子
100 => 1100100
15 => 0001111
100 | 15 => 1101111
15 | 100 => 1101111
两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算
均为0 => false | false => false => 0
均为1 => true | true => true => 1
一个为0,一个为1 => false | true => true => 1
& 并运算
继续举例子
100 => 1100100
15 => 0001111
100 & 15 => 0000100
15 & 100 => 0000100
两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算
均为0 => false & false => false => 0
均为1 => true & true => true => 1
一个为0,一个为1 => false & true => false => 1
^异或运算
例子继续
100 => 1100100
15 => 0001111
100 ^ 15 => 1101011
15 ^ 100 => 1101011
两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算
两个数字相同 => true => 0
两个数字不同 => false => 1
此外,逆运算的结果等于数据本身:a ^ b ^ b = a;
~取反运算
举例之前说明一点,上面的例子中,因为运算都是从末位开始的,因此十进制转换为二进制后,前面的0在不需要的情况下都已经舍去了。
取反运算(~)是从二进制首位开始计算的,因此,首先必须明确一件事:int的二进制全长为32位。
15 => 00000000000000000000000000001111 => 15
~15 => 11111111111111111111111111110000 => -16
将一个数字转换为完整的二进制,从第一位开始,如果是0,则取值1,如果是1,则取值0,直到最后一位。
转换为数学运算:~a = -1 × a - 1;
此外,~~a = ~(~a) = a;