C#按位相等布尔运算符

13

C#中的布尔变量是1字节变量。因为bool是Boolean类的快捷方式,所以我希望&=|=操作已被重写以让它们与布尔类型一起使用,但我对此不太确定。没有类似&&=||=可供使用。

我的问题是,像下面这样做:

bool result = condition;
result &= condition1;
result &= condition2;

这样做可以起作用,但是这只是因为bool类型的false值为00000000true 值为00000001,或者因为在bool类底层调用前面所提到的&&=||= 之类的运算符吗?实际上使用前面的注释是安全的吗?还是更好地使用

bool result = condition;
result = result && condition1;
result = result && condition2;

避免任何奇怪的行为?

请注意,条件可能是像A >= B这样的东西,或者任何其他可能返回布尔值的检查。

2个回答

12
据我所知,根据这篇SO帖子,位运算符和逻辑运算符在布尔运算上的唯一真正区别是,如果左侧操作数为false,则逻辑运算符不会计算右侧操作数。

这意味着,如果您有两个布尔值,差别不大。但是如果您有两个方法,则使用逻辑运算符时最后一个方法不会被执行,而使用二进制运算符时会被执行。

如果第二个操作数本身就是一个布尔表达式,那么你可以避免对它进行评估。无论如何,这种好处需要通过基准测试来确认。 - user1196549

3
根据 文档(重点是我的):
使用 &= 赋值运算符的表达式,例如
x &= y
等同于
x = x & y
除了只对 x 求值一次。& 运算符在整数操作数上执行按位逻辑 AND 操作,在布尔操作数上执行逻辑 AND 操作。 |= 也是类似的。而且 更多信息请查看链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接