您的位置:

Java位运算符详解

一、位运算符概述

Java位运算符用于操作二进制位,是Java中比较底层的运算符,可以对数字的二进制位进行位运算,使用的符号是"|"、"&"、"^"、"~"、">>"、"<<、">>>"。

其中,"|"表示按位或,"&"表示按位与,"^"表示按位异或,"~"表示按位取反,">>"表示右移,"<<表示左移,">>>"表示无符号右移。

Java位运算符的优先级和普通运算符一样,可以使用括号来改变运算的优先级。

二、按位或("|")运算符

按位或("|")运算符是一个二元运算符,用于对两个二进制数的每个对应位进行或运算,得到的结果如果有一位为1,那么该位就是1,否则为0。

示例代码:

int a = 5;
int b = 3;
int c = a | b; // c的值为7(二进制位为101)

在上述示例代码中,a和b的二进制位分别为101和011,进行按位或运算后得到的结果为111,即7。

三、按位与("&")运算符

按位与("&")运算符同样是一个二元运算符,用于对两个二进制数的每个对应位进行与运算,得到的结果如果有一位为0,那么该位就是0,否则为1。

示例代码:

int a = 5;
int b = 3;
int c = a & b; // c的值为1(二进制位为001)

在上述示例代码中,a和b的二进制位分别为101和011,进行按位与运算后得到的结果为001,即1。

四、按位异或("^")运算符

按位异或("^")运算符也是一个二元运算符,用于对两个二进制数的每个对应位进行异或运算,得到的结果如果两个二进制数的对应位相同,则该位为0,否则为1。

示例代码:

int a = 5;
int b = 3;
int c = a ^ b; // c的值为6(二进制位为110)

在上述示例代码中,a和b的二进制位分别为101和011,进行按位异或运算后得到的结果为110,即6。

五、按位取反("~")运算符

按位取反("~")运算符是一个一元运算符,用于对一个二进制数的每个对应位进行取反运算,得到的结果将二进制数的每一位都取反。

示例代码:

int a = 5;
int b = ~a; // b的值为-6

在上述示例代码中,a的二进制位为101,进行按位取反运算后得到的结果为010,即2,再取补码得到-6。

六、右移(">>")运算符

右移(">>")运算符是一个二元运算符,将一个二进制数向右移动指定的位数,右移后高位补符号位,低位舍弃,等价于对该数除以2的n次方。

示例代码:

int a = 8;
int b = a >> 1; // b的值为4

在上述示例代码中,a的二进制位为1000,进行右移1位后得到的结果为0100,即4。

七、左移("<<")运算符

左移("<<")运算符同样是一个二元运算符,将一个二进制数向左移动指定的位数,左移后低位补0,高位舍弃,等价于对该数乘以2的n次方。

示例代码:

int a = 8;
int b = a << 1; // b的值为16

在上述示例代码中,a的二进制位为1000,进行左移1位后得到的结果为10000,即16。

八、无符号右移(">>>")运算符

无符号右移(">>>")运算符也是一个二元运算符,和右移的不同在于不考虑符号位,无论符号位是0还是1,都在左边补0。

示例代码:

int a = -8;
int b = a >>> 1; // b的值为2147483644

在上述示例代码中,a的二进制位为11111111111111111111111111111000,进行无符号右移1位后得到的结果为01111111111111111111111111111100,即2147483644。