Java位运算符的用法(附带实例,新手必看)
Java 中的位运算符用来对二进制的位进行操作,其操作数的类型是整数类型以及字符类型,运算结果是整型数据。
整型数据在内存中以二进制的形式表示,如 int 型变量 7 的二进制表示是:
使用按位与运算符的示例如下:
使用按位或运算符的示例如下:
使用按位异或运算符的示例如下:
使用按位取反运算符的示例如下:
使用右移位运算符的示例如下:
使用左移位运算符的示例如下:
使用无符号右移位运算符的示例如下:
【实例】位运算符的使用。
整型数据在内存中以二进制的形式表示,如 int 型变量 7 的二进制表示是:
00000000 00000000 00000000 00000111其中,左边最高位是符号位,最高位是 0 表示正数,若为 1 则表示负数。负数采用补码表示,如 -8 的二进制表示为:
111111111 111111111 1111111 11111000了解了整型数据在内存中的表示形式后,开始学习位运算符。
Java按位与运算符(&)
“按位与”运算符“&”为双目运算符,其运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位都是 1,则结果为 1,否则结果为 0。使用按位与运算符的示例如下:
int a = 3; // 0000 0011 int b = 5; // 0000 0101 int c = a & b; // 0000 0001按照按位与运算的计算规则,3&5 的结果是 1。
Java按位或运算符(|)
“按位或”运算符“|”为双目运算符。“按位或”运算的运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位只要有一个为 1,则结果为 1,否则结果为 0。使用按位或运算符的示例如下:
int a = 3; // 0000 0011 int b = 5; // 0000 0101 int c = a | b; // 0000 0111按照按位或运算的计算规则,3|5 的结果是 7。
Java按位异或运算符(^)
“按位异或”运算符“^”为双目运算符。“按位异或”运算的运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位相同,则结果为 0,否则结果为 1。使用按位异或运算符的示例如下:
int a = 3; // 0000 0011 int b = 5; // 0000 0101 int c = a ^ b; // 0000 0110按照按位异或运算的计算规则,3^5 的结果是 6。
Java按位取反运算符(~)
“按位取反”运算符“~”为单目运算符。“按位取反”运算的运算法则:先将参与运算的数转换成二进制数,然后把各位的 1 改为 0,0 改为 1。使用按位取反运算符的示例如下:
int a = 3; // 0000 0011 int b = ~a; // 1111 1100按照按位取反运算的计算规则,~3 的结果是 -4。
Java右移位运算符(>>)
“右移位”运算符“>>”为双目运算符。“右移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向右移动对应的位数,低位移出(舍弃),高位补符号位(正数补 0,负数补 1)。使用右移位运算符的示例如下:
int a = 3; // 0000 0011 int b = a >> 1; // 0000 0001按照右移位运算的计算规则,3>>1 的结果是 1。
Java左移位运算符(<<)
“左移位”运算符“<<”为双目运算符。“左移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向左移动对应的位数,高位移出(舍弃),低位的空位补0。使用左移位运算符的示例如下:
int a = 3; // 0000 0011 int b = a << 1; // 0000 0110按照左移位运算的计算规则,3<<1 的结果是 6。
Java无符号右移位运算符(>>>)
“无符号右移位”运算符“>>>”为双目运算符。“无符号右移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向右移动对应的位数,低位移出(舍弃),高位补 0。使用无符号右移位运算符的示例如下:
int a = 3; // 0000 0011 int b = a >>> 1; // 0000 0001按照无符号右移位运算的计算规则,3>>>1 的结果是 1。
【实例】位运算符的使用。
public class BitOperation { public static void main(String[] args) { int i = 3; int j = 5; System.out.println("i&j 的值为: " + (i&j)); // 按位与 System.out.println("i|j 的值为: " + (i|j)); // 按位或 System.out.println("i^j 的值为: " + (i^j)); // 按位异或 System.out.println("~i 的值为: " + (~i)); // 按位取反 System.out.println("i>>>1 的值为: " + (i>>>1)); // 无符号右移 System.out.println("i<<1 的值为: " + (i<<1)); // 左移 } }程序执行结果为:
i&j 的值为: 1
i|j 的值为: 7
i^j 的值为: 6
~i 的值为: -4
i>>>1 的值为: 1
i<<1 的值为: 6