Java 位运算符 &、|、^、~、<<、>>

  • 1. `与`运算符 (`&`)
  • 2. `或`运算符(`|`)
  • 3. `异或`运算符(`^`)
  • 4. `取反`运算符(`~`)
  • 5. `左移`运算(`<<`)
  • 6. `右移`运算(`>>`)



位运算符指的是 与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)。

位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算。

我们编码中最小的单位是字节,而一个字节有8位,每一位就是一个0或1,所以将十进制的 “1” 用二进制表示就是00000001,十进制的 “2” 用二进制表示就是00000010


1. 运算符 (&)

如果 5&9 那么这个应该怎么运算呢?

首先我们需要把两个十进制的数转换成二进制

5 : 0000 0101 
 9 : 0000 1001

将二进制上下对比取 “1” 的交集,

1 : 0000 0001

简单来说,1表示true,0表示false,而与运算的时候相同位之间其实就是两个Boolean的运算,
上下对应的看,该位上的两个,全true(1),即为true(1),全false(0),即为false(0),一个false(0)一个true(1),还是false(0)


2. 运算符(|)

如果 5|10 那么这个应该怎么运算呢?

首先我们需要把两个十进制的数转换成二进制

5 : 0000 0101 
 10 : 0000 1010

将二进制上下对比取 “1” 的并集,

15 : 0000 1111

简单来说,1表示true,0表示false,而与运算的时候相同位之间其实就是两个Boolean的运算,
上下对应的看,该位上的两个,遇true(1)就是true(1),无true(1)就是false(0)


3. 异或运算符(^)

如果 7^14 那么这个应该怎么运算呢?

首先我们需要把两个十进制的数转换成二进制

7 : 0000 0111 
 14 : 0000 1110

将二进制上下对比取 “1” 的对称差,

9 : 0000 1001

简单来说,1表示true,0表示false,而与运算的时候相同位之间其实就是两个Boolean的运算,
上下对应的看,该位上的两个,只要相同都是false(0),只有不同才是true(1)


4. 取反运算符(~)

如果 ~1 那么这个应该怎么运算呢?

取反运算其实挺简单的,就是在二进制中,把1变0,0变1

注意:二进制中,最高位是符号位 1表示负数,0表示正数

编程时: ~1 输出结果为 -2

计算机存储时是按照补码存储的。

计算步骤:

1的二进制表示--------------------------------0000 0001

按位取反----------------------------------------1111 1110 (计算机以补码形式存储,所以要求11111110的补码)

求补码-------------------------------------------1000 0010(11111110除符号位,其他位取反加一)

因此 ~1 =-2


5. 左移运算(<<)

如果 5 << 2 那么这个应该怎么运算呢?
首先我们需要把两个十进制的数转换成二进制 ,

5 : 0000 0101

然后二进制中的所有的 “1” 向左移动两位

20 : 0001 0100

总结规律后得出一个快速的算法
java 加上千分位 java千位符_java


6. 右移运算(>>)

如果 20 >> 2 那么这个应该怎么运算呢?
首先我们需要把两个十进制的数转换成二进制 ,

20 : 0001 0100

然后二进制中的所有的 “1” 向右移动两位

5 : 0000 0101

总结规律后得出一个快速的算法
java 加上千分位 java千位符_补码_02