Java中的位运算符
(1)位运算的概念
位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算,
Java的位运算(bitwise operators )直接对整数类型的位进行操作,这些整数类型包括long、int、short、char 和byte,位运算符具体如下表:

(2)&(与)运算
例如:4 & 7 ,则先把4和7换算成二进制:
4 : 0100
7: 0111
结果: 0100
将结果换算成10进制为4。
运算规则为:1表示true,0表示false。而与运算的时候相同位之间其实就是两个Boolean的运算
全true(1),即为true(1)
全false(0),即为false(0)
一false(0)一true(1),还是false(0)
(3)|(或)运算
例如:5 | 9
5 : 0000 0101
9 : 0000 1001
结果:0000 1101
将结果换算成10进制为13。
运算规则:遇true(1)就是true(1),无true(1)就是false(0)
(4)<<(左移运算符)
左移就是把所有位向左移动几位。如: 12 << 2 意思就是12向左移动两位,
12的二进制: 0000 1100

所有的位全都向左移动两位,然后把右边空的两个位用0补上,最左边多出的两个位去掉,最后得到的结果就是00110000 结果就是48
一个快速的算法 : M << n 其实可以这么算 M << n = M * 2n
(5)>>(右移运算符)
与左移运算符相反,即把所有位向右移动几位。如果是正数,左边空的补零;如果是负数,左边空的补1。
正数:5>>1=2
5:0000 0101
结果:0000 0010 将结果换成10进制为2。
负数:-5>>1=-3
-5:1111 1011
结果:1111 1101 将结果换成10进制为-3。
(6)~(取反运算符)

即把0变成1,把1变成0。
(7)将负数转换成二进制
问题:-3如何转换成二进制?
首先我们将+3转换成二进制,假设是为int类型(32位)的,那么二进制表示为:
0000 0000 0000 0000 0000 0000 0000 0011 --这称之为原码:一个整数的绝对值的二进制表示称之为原码。
负数转换成二进制分为3步:
1、首先将负数转换为对应的原码
-3的原码为(也就是+3转换成二进制后的字符串):
0000 0000 0000 0000 0000 0000 0000 0011
2、再将原码的每一位做取反操作得到反码。 取反操作:0变为1 1变为0; 取反后的结果即为:
1111 1111 1111 1111 1111 1111 1111 1100
3、将反码+1得到补码
1111 1111 1111 1111 1111 1111 1111 1101
浙公网安备 33010602011771号