请教C#中&=、|=、^=运算符对数值的运算逻辑
C#中数值类型的
&=、|=、^=运算符解析 首先明确:当这些运算符作用于数值类型时,它们是按位运算符的复合赋值版本,逻辑是「先执行按位运算,再将结果赋值给左侧变量」,和你已知的单独按位运算符逻辑完全对应,只是合并了赋值操作。
一、&=:按位与赋值
x &= y 等价于 x = x & y,这里的&是按位与(不是逻辑与),规则是对两个数的二进制每一位进行与运算:只有当对应位都为1时,结果位才是1,否则为0。
拿你的测试例子拆解:
- 当
x=5,二进制是101;3的二进制是011 - 按位与运算:
101 & 011 ----- 001 - 结果是二进制
001,即十进制1,和你得到的输出一致。
再验证其他测试用例:
x=10(二进制1010)&3(0011)=0010(十进制2)x=20(二进制10100)&3(00011)=00000(十进制0)
二、|=:按位或赋值
x |= y 等价于 x = x | y,|是按位或,规则是对应位只要有一个为1,结果位就是1。
例子:
int x = 5; // 二进制101 x |= 3; // 101 | 011 = 111(十进制7) Console.WriteLine(x); // 输出7
三、^=:按位异或赋值
x ^= y 等价于 x = x ^ y,^是按位异或,规则是对应位不同时结果为1,相同时为0。
例子:
int x = 5; // 二进制101 x ^= 3; // 101 ^ 011 = 110(十进制6) Console.WriteLine(x); // 输出6
总结:所有op=形式的复合赋值运算符,本质都是x = x op y。当op为&、|、^且操作数是数值时,执行的是按位运算,而非逻辑运算。
内容的提问来源于stack exchange,提问作者ShakingJupiter
相关产品推荐
相关产品推荐

