java中的 |=、&=、^=

本文详细介绍了Java中的位运算符|=、&=和^=的用法。通过实例代码展示了它们如何改变二进制数值,并解释了各自的操作规则:|=是按位或运算,当对应位都为0时结果才为0;&=是按位与运算,只有对应位都为1时结果才为1;^=是按位异或运算,对应位相同时结果为0,否则为1。

|= 

关于 |= 运算符:|= 运算符和 += 这一类的运算符一样,拆解开就是 a = a | b;

代码如下:

 

复制代码

public static strictfp void main(String[] args) {

   int a = 5; // 0000 0101
   int b = 3; // 0000 0011
   a |= b; // 0000 00111
   System.out.println(a);

}

复制代码

 

具体规则为:两个二进制对应位为0时该位为0,否则为1。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行|运算,后三位的的对应位都不是同时等于0,所以最终结果为 0000 0111 也就是7的二进制。


 

&=

&= 和 |= 基本是一样的,只不过对于比较同位方式不同。

代码如下:

复制代码

public static strictfp void main(String[] args) {

    int a = 5; // 0000 0101
    int b = 3; // 0000 0011
    a &= b; // 0000 0001
    System.out.println(a);
}

复制代码

 

具体规则为:两个二进制对应位都为1时,结果为1,否则结果为都0。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行&运算,只有最后一位都为1,则最终结果为 0000 0001 也就是1的二进制。


 

^=

运算规则还是同上。

代码如下:

public static strictfp void main(String[] args) {
    int a = 5; // 0000 0101
    int b = 3; // 0000 0011
    a ^= b; // 0000 0110
    System.out.println(a);
}

具体规则为:两个二进制对应位相同时,结果为0,否则结果为1。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行^运算,1-5位对应位都是0所以1-5位都为0,第8位都为1所以第8位也为0,其他的对应位都不相等所以为1,则最终结果为 0000 0110 也就是6的二进制。


 

总结:

|=:两个二进制对应位都为0时,结果等于0,否则结果等于1;

&=:两个二进制的对应位都为1时,结果为1,否则结果等于0;

^=:两个二进制的对应位相同,结果为0,否则结果为1。

这些运算符属于复合赋值运算符,在不同编程语言中含义和用法基本类似,下面以常见的Python和Java语言为例说明: ### 含义 - `+=`:加法赋值运算符,将变量与右侧表达式相加,并将结果赋值给该变量。 - `-=`:减法赋值运算符,将变量与右侧表达式相减,并将结果赋值给该变量。 - `*=`:乘法赋值运算符,将变量与右侧表达式相乘,并将结果赋值给该变量。 - `/=`:除法赋值运算符,将变量与右侧表达式相除,并将结果赋值给该变量。 - `%=`:取模赋值运算符,将变量与右侧表达式取模(取余数),并将结果赋值给该变量。 - `>>=`:右移赋值运算符,将变量的二进制位向右移动指定的位数,并将结果赋值给该变量。 - `<<=`:左移赋值运算符,将变量的二进制位向左移动指定的位数,并将结果赋值给该变量。 - `&=`:按位与赋值运算符,将变量与右侧表达式按位进行与运算,并将结果赋值给该变量。 - `|=`:按位或赋值运算符,将变量与右侧表达式按位进行或运算,并将结果赋值给该变量。 - `^=`:按位异或赋值运算符,将变量与右侧表达式按位进行异或运算,并将结果赋值给该变量。 ### 用法示例 #### Python示例 ```python # 初始化变量 a = 10 b = 3 # += 用法 a += b # 等价于 a = a + b print(f"a += b 结果: {a}") # 重新初始化 a a = 10 # -= 用法 a -= b # 等价于 a = a - b print(f"a -= b 结果: {a}") # 重新初始化 a a = 10 # *= 用法 a *= b # 等价于 a = a * b print(f"a *= b 结果: {a}") # 重新初始化 a a = 10 # /= 用法 a /= b # 等价于 a = a / b print(f"a /= b 结果: {a}") # 重新初始化 a a = 10 # %= 用法 a %= b # 等价于 a = a % b print(f"a %= b 结果: {a}") # 重新初始化 a a = 10 # >>= 用法 a >>= b # 等价于 a = a >> b print(f"a >>= b 结果: {a}") # 重新初始化 a a = 10 # <<= 用法 a <<= b # 等价于 a = a << b print(f"a <<= b 结果: {a}") # 重新初始化 a a = 10 # &= 用法 a &= b # 等价于 a = a & b print(f"a &= b 结果: {a}") # 重新初始化 a a = 10 # |= 用法 a |= b # 等价于 a = a | b print(f"a |= b 结果: {a}") # 重新初始化 a a = 10 # ^= 用法 a ^= b # 等价于 a = a ^ b print(f"a ^= b 结果: {a}") ``` #### Java示例 ```java public class CompoundAssignmentOperators { public static void main(String[] args) { // 初始化变量 int a = 10; int b = 3; // += 用法 a += b; // 等价于 a = a + b System.out.println("a += b 结果: " + a); // 重新初始化 a a = 10; // -= 用法 a -= b; // 等价于 a = a - b System.out.println("a -= b 结果: " + a); // 重新初始化 a a = 10; // *= 用法 a *= b; // 等价于 a = a * b System.out.println("a *= b 结果: " + a); // 重新初始化 a a = 10; // /= 用法 a /= b; // 等价于 a = a / b System.out.println("a /= b 结果: " + a); // 重新初始化 a a = 10; // %= 用法 a %= b; // 等价于 a = a % b System.out.println("a %= b 结果: " + a); // 重新初始化 a a = 10; // >>= 用法 a >>= b; // 等价于 a = a >> b System.out.println("a >>= b 结果: " + a); // 重新初始化 a a = 10; // <<= 用法 a <<= b; // 等价于 a = a << b System.out.println("a <<= b 结果: " + a); // 重新初始化 a a = 10; // &= 用法 a &= b; // 等价于 a = a & b System.out.println("a &= b 结果: " + a); // 重新初始化 a a = 10; // |= 用法 a |= b; // 等价于 a = a | b System.out.println("a |= b 结果: " + a); // 重新初始化 a a = 10; // ^= 用法 a ^= b; // 等价于 a = a ^ b System.out.println("a ^= b 结果: " + a); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值