JAVA & 、|、^、<< 、>>、>>>、~ 运算符使用

一、&

如果相对应位都是1,则结果为1,否则为0

例子:

9 & 3

9 二进制:1001

3 二进制:0011

所以 9 & 3 = 0001

结果为 1


二、|

| 如果相对应位都是0,则结果为0,否则为1

例子:

2 | 3

2 二进制:0010

3 二进制:0011

2 | 3 = 0011

结果为3


三、^

^ 如果相对应位值相同,则结果为0,否则为1

例子:

4  ^ 9

4 二进制:0100

9 二进制:1001

4 ^ 9 = 1101

结果为13


四、<<

<<  按位左移运算符。左操作数按位左移右操作数指定的位数。

注意:实际操作按照32位二进制进行,如图


由图可知

2 << 2

2 二进制:0000 0000 0000 0000 0000 0000 0000 0010

左移两位:0000 0000 0000 0000 0000 0000 0000 1000

结果为 8


五、>>

>>  按位右移运算符。左操作数按位右移右操作数指定的位数。

>>为高位补,并且补完后进行减1 除符号位 取反 操作,如图


上图为负数右移运算方式

以 13 >> 2 为例(正数原来跟左移原理一样,只是方向改变)

13 二进制: 0000 0000 0000 0000 0000 0000 0000 1101

右移2位: 0000 0000 0000 0000 0000 0000 0000 0011

结果为 3


六、>>>

>>>  按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

例子:

5 >>> 2

5 二进制:0000 0000 0000 0000 0000 0000 0000 0101

右移2位: 0000 0000 0000 0000 0000 0000 0000 0001 (左边补零)

结果为 0001  = 1


七、~

按位补运算符翻转操作数的每一位,即0变成1,1变成0。

例子:

~5

5 二进制:0000 0000 0000 0000 0000 0000 0000 0101

翻转后:   1111 1111 1111 1111 1111 1111 1111 1010

除了符号位,其他-1后按位取反

-1操作:   1111 1111 1111 1111 1111 1111 1111 1001

按位取反:1000 0000 0000 0000 0000 0000 0000 0110

结果为  - 6

步骤:翻转》减1》取反(符号位不变,其他位反转)


猜你喜欢

转载自blog.csdn.net/JasonHector/article/details/79170090