一、位运算符概述
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。