按位运算
0.介绍
按位运算符 用于对基本数据类型中整型数据进行以单个位(bit) 为单位的运算。
Java中的位运算符包括:
运算符 | 中文名称 | 英文名称 |
---|---|---|
& | 按位与 | Bitwise AND |
| | 按位或 | Bitwise OR |
~ | 按位非 | Bitwise NOT |
^ | 按位异或 | Bitwise XOR |
<< | 左移运算符 | Bitwise left shift |
>> | 右移运算符 | Bitwise right shift |
>>> | 无符号右移运算符 | Biswise unsigned right shift |
注意:下面的例子均假设整型数据为8位(即byte类型)
1.按位与&
规则
按位与运算符与逻辑与运算符的行为十分相似,按位与运算符比较两个操作数对应位的值,若均为1则返回1,否则返回0。如下表所示:
A | B | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
例如,对27和31这两个整型数作按位与运算:
- 将操作数表示为二进制形式,即:DEC 27 = BIN 00011011 , DEC 31 = BIN 00011111
- 按上表规则对操作数的对应位进行运算得到:BIN 00011011 = DEC 27
- 则表达式 27 & 31 的值为 27
应用
按位与运算符的一个应用就是判断一个整数是奇数还是偶数。这是因为当二进制数转化为十进制数时,最右位(rightmost digital,也称the least significant bit)表示十进制的20 = 1。若此位为0,那么该十进制数是若干2的次幂的和,为偶数(even);若此位为1,那么该十进制数是若干2的次幂的和加1,必为奇数(odd)。故只需使用表达式 num & 1 判断最右位的值即可。
Java代码片段如下:
public boolean isOdd(int num) {
if (num & 1 == 1)
return true;
else
return false;
}
与通过求余判断奇偶数的方法相比,此种方法性能较好。
2.按位或|
规则
类似的,按位或运算符与逻辑或运算符行为十分相似,按位或运算符比较两个操作数对应位的值,若均为0则返回0,否则返回1。如下表所示:
A | B | 结果 |
---|---|---|
0 | 0</ |