按位或和赋值运算符 (|=) 为第一个操作数分配一个等于两个操作数按位或运算结果的值。
(x |= y) 为等价于 (x = x | y)
按位或运算符 (|) 是一个二元运算符,它采用两个长度相等的位模式并对每对相应位执行逻辑或运算。如果同一位置的一个或两个位为 1,则返回 1,否则返回 0。
Bit_1 | Bit_2 | Bit_1 | Bit_2 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
下面的示例描述了按位 OR 运算符的工作原理:
50 | 25 returns 59
50 -> 110010 (In Binary)
| 25 -> | 011001 (In Binary)
---- --------
59 <- 111011 (In Binary)
使用按位或运算符(|)的代码如下:
public class MyClass {
public static void main(String[] args) {
int x = 50;
int y = 25;
//按位或及赋值运算
x |= y;
//显示结果
System.out.println("x = "+x);
}
}
上述代码的输出将是:
x = 59
示例:求小于或等于给定数字的最大2的幂
考虑一个整数1000。在按位格式中,它可以写为1111101000。但是,这里没有写出所有位。完整的表示将是 32 位表示,如下所示:
00000000000000000000001111101000
执行
00000000000000000000001111111111
此结果加一,然后将结果右移一位,将得到小于或等于 1000 的最大 2 次幂。
00000000000000000000001000000000
下面的代码将计算小于或等于给定数字的 2 的最大幂。
public class MyClass {
static int MaxPowerOfTwo(int N) {
//将所有右侧位更改为1。
N |= (N>>1);
N |= (N>>2);
N |= (N>>4);
N |= (N>>8);
N |= (N>>16);
//将 1 加到 N 得到最小的幂
//大于给定数字的 2 个
N += 1;
//右移一位使得
//小于或的2的最大幂
//等于给定数字
N >>= 1;
return N;
}
public static void main(String[] args) {
System.out.println("MaxPowerOfTwo(100) = "+
MaxPowerOfTwo(100));
System.out.println("MaxPowerOfTwo(500) = "+
MaxPowerOfTwo(500));
System.out.println("MaxPowerOfTwo(1000) = "+
MaxPowerOfTwo(1000));
}
}
上面的代码将给出以下输出:
MaxPowerOfTwo(100) = 64
MaxPowerOfTwo(500) = 256
MaxPowerOfTwo(1000) = 512