Java位运算符

Posted by OOFTF Blog on April 25, 2021

左移( « )

5 « 2

首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位):

0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:

0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20

右移( » )

5 » 2

还是先将5转为2进制表示形式:

0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:

0000 0000 0000 0000 0000 0000 0000 0001

无符号右移( »> )

-5 »> 3

-5换算成二进制 : 1111 1111 1111 1111 1111 1111 1111 1011

-5无符号右移3位后的结果 536870911 换算成二进制 (用0进行补位) : 0001 1111 1111 1111 1111 1111 1111 1111

位与( & )

5 & 3 = 1

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011


1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001

位或( | )

5 | 3 = 7

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011


7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111

位异或( ^ )

5 ^ 3 = 6

5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011


6 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110

异或运算:两个值只要有一位发生改变,结果就会改变。

异或运算有下面三个特性

  1. 任何数和 0 做异或运算,结果仍然是原来的数,即 a ^ 0 = a 。
  2. 任何数和其自身做异或运算,结果是 0,即 a ^ a = 0。
  3. 异或运算满足交换律和结合律,即 a ^ b ^ a=b ^ a ^ a=b ^ (a ^ a)=b ^ 0 = b 。

位非( ~ )

~5 = -6

5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101


-6 转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010