Java 位运算符 - Java 编程入门

Java 位运算符直接对整型的二进制进行位操作。

位与运算符为 &,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。如下:

int x = 5, y = 12;
int z = x & y;

运算过程如下:

5 位与 12 的运算过程

位或运算符为 |,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1。如果对应的二进制位都为 0,结果才为 0。

11 | 7 的运算过程如下:

11 位或 7 的运算过程

位异或运算符为 ^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。

11 ^ 7 的运算过程如下:

11 位异或 7 的运算过程

位取反运算符为 ~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。如下:

int i = 10;
System.out.printf("%d \n",~i); //输出 -11

运算过程如下:

对 10 位取反的运算过程

因为取反之后的结果是十六进制数,而在上面的程序中使用 %d 将输出转换为了十进制数,所以输出的结果是 -11,而不是 65525。可以使用如下语句查看十六进制结果。

int i=10;
System.out.printf("%x \n",~i); //输出 fff5

可以看到输出结果为 fff5,将它转换为二进制是 1111111111110101。这个二进制数的最高位为 1,表示这个数为负数。除最高位外,按位取反再加 1,即得到二进制原码 1000000000001011,用十进制数表示即为 -11。

左移位运算符为 «,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

11 << 1;

将整数 11 向左位移 1 位的过程如下:

对 11 左移 1 位运算过程

从图中可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。

右位移运算符为 »,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。

11 >> 1

将整数 11 向右位移 1 位的过程下:

对 11 右移 1 位运算过程

从图中可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。

Loading...


Run