C# c逻辑运算符的问题&and|

C# c逻辑运算符的问题&and|,c#,visual-studio,logical-operators,C#,Visual Studio,Logical Operators,|是一个OR and&is and 我有下面的代码,它们的工作原理是相反的 int a = 0; int b = 0; int c = -1; if ((a | b | c) == 0) { textBox8.Text = "everything 0"; } else

|是一个OR and&is and

我有下面的代码,它们的工作原理是相反的

            int a = 0;
            int b = 0;
            int c = -1;
            if ((a | b | c) == 0) 
            {
                textBox8.Text = "everything 0"; 
            }
            else
            {
                textBox8.Text = "something is not a 0"; // <- code goes here
            }            
            if ((a & b & c) == 0)
            {
                textBox9.Text = "everything 0";  // <- code goes here            
            }
            else
            {
                textBox9.Text = "something is not a 0";               
            }
为什么我会有这个结果

a | b | c==0并不意味着a为零或b为零或c为零。为此,您需要a==0 | b==0 | c==0,您还可以使用| |,它在一个操作数为真后停止计算


对于数字操作数,|是一个,您可以单独阅读对于除布尔操作数以外的任何操作数都无效,因此养成使用| |的习惯可能会很有用,除非您明确地不这样做;我不想短路。这样,当缩进以将其用作逻辑运算符时,就不会意外地将其用作位运算符。例如,在本例中可能是编译器错误。

因为a&b&c==0并不意味着一切都是0,但没有公共位设置。您是否会将按位或|与逻辑或| |?a==0&&b==0&&c==0混淆。。。您必须使用&&for和| | forOr@Jawad实际上,如果你这样做的话,你可以使用&因为你现在处理的是bool值,这将表现为一个逻辑and。但是,&&将短路并在第一个假值时停止比较。在逻辑运算中总是使用| |和&&的一个原因是,您不能意外地将它们应用于任何非bool的对象。