我见过documentation并回答(1) (2)试图解释| =运算符是什么以及它是如何工作的,虽然它在基本级别上有意义......我不明白为什么或如何完成它的工作。
解释说a |= b
等同于a = a | b
,但我不知道如何评估是否给a
自身的价值(a
)或b
的值。根据我的理解,“或”意味着它可以是两件事之一,但没有具体说明它是哪两件事。
在Visual Studio中,我使用了一个名为Refactoring Essentials的扩展,它建议我用一个带有| =运算符的行替换我的一些代码,虽然代码与运算符在那里工作,但我很遗憾它完成了它,这促使我尝试在线研究它(因此,提出这个问题)。
我的代码来自
if (MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No)
{
e.Cancel = true;
}
到
e.Cancel |= MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No;
它仍然有效。虽然我猜测e.Cancel
是基于对MessageBox.Show(...) == MessageBoxResult.No
的评估而确定的,但我不知道为什么在那里需要| =运算符。为什么不使用标准赋值(=)运算符,因为表达式的结果是布尔值,e.Cancel
采用布尔值?那么使用条件(?:)运算符呢?如何| =比较(如果它甚至)?
答案 0 :(得分:7)
|
是BITWISE OR运算符,它不是BOOLEAN OR运算符。
假设您有两个8位二进制数10110100和11000101。
如果你按位OR它们将在输出中为每个位置设置一个1
位,其中第一个或第二个输入中设置了一个位,并且0
位是其中的10110100
11000101
--------
11110101
位。设置两个输入位:
x |= y;
这就是它的全部内容。
如您所知,x = x | y;
与bool
完全相同。
要注意的最后一点是1
被视为一位数,其中0
= true而|
= false,用于{{1}应用于&
时的}和bool
按位运算。
但请注意,您不能将bool
和int
按位操作混合使用。例如,以下将给出编译错误:
bool t = true;
bool f = false;
int x = t | f; // Error: Cannot implicitly convert type 'bool' to 'int'
附录:
人们使用&=
和|=
代表bool
而不是看起来更合乎逻辑(双关语)&&=
和||=
的原因是后两个运营商实际上并不存在!