Java运算符(‘&‘, ‘|‘, ‘^‘, ‘~‘, ‘<<‘, ‘>>‘, ‘>>>‘)

Java运算符('&', '|', '^', '~', '<<', '>>', '>>>')

首先了解一下位运算,位运算就是将某个十进制数字转化为二进制的数字,然后再根据不同的运算符进行运算。

例如:

1:0001

2:0010

3:0011

5:0101

15:01111

16:10000

按位与运算:&

简单来说,就是全1为1,其余为0

举个例子说:

0

0

0

0

1

0

1

0

0

1

1

1

那么:

2&3 = 0010 & 0011 = 0010 = 2;

3&5 = 0011 & 0101 = 0001 = 1;

按位或运算:|

这个简单说就是有1则1,没有则0

0

0

0

0

1

1

1

0

1

1

1

1

举个例子来说:

2|3 = 0010 | 0011 = 0011 = 3;

3|5 = 0011 | 0101 = 0111 = 7;

异或运算:^

这个简单来说就是相同为0,不同为1

0

0

0

0

1

1

1

0

1

1

1

0

举个例子来说:

2^3 = 0010 ^ 0011 = 0001 = 1;

3^5 = 0011 ^ 0101 = 0110 = 6;

取反运算:~

首先我们要知道:

正数的原码 = 反码 = 补码

负数的反码 = 原码符号位不变,其他位全反,负数的补码 = 补码+1

取反就是将每一位都取反,0换成1,1换成0;

例如:

~6 = ~0 0110(注意这里最前面的是符号位) = 1 1001这里得到的是补码,要把它转成反码,反码=补码-1

所以1 1001 -1 =1 1000,然后再将反码转换为原码,原码 = 反码符号位不变,其他全反,得到1 0111 = -7

这里有一个公式:

(~x)= -(x+1)

左移运算:<<

左移操作 x << i 表示 数字x向左移动 i 位,低位补0.

例如:8 << 2 表示将8向左移动2位,底位补0.

8 = 1000

向左移动两位,低位补零 => 100000 = 32;

右移运算:>>

右移操作x >> i 表示 数字x向右移动 i 位,高位补0.

例如:8 >> 2 表示将8向右移动2位,高位补0.

8 = 1000

向右移动两位,高位补零 => 0010 = 2

无符号右移运算:>>>

无符号右移操作 x >>> i 表示数字x向右移动 i 位,高位补0.

例如:8 >>> 2 表示将8向右移动2位,高位补0.

8 = 1000

向右移动两位,高位补零 => 0010 = 2

这里要特别注意,右移运算和无符号右移运算在正整数范围内是相同的,但是在负数范围是有区别的。

右移运算负数时前面要有以为表示负号,但是在无符号这里,是不需要的,也就是高位全是0。

你可能感兴趣的:(java)