【问题标题】:problem with c# logical operators & and | [duplicate]c# 逻辑运算符 & 和 | 的问题[复制]
【发布时间】:2021-03-26 13:01:27
【问题描述】:

|是 OR 并且 & 是 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";               
            }

为什么我有这个结果?

https://i.stack.imgur.com/0Afv6.jpg

【问题讨论】:

  • 因为(a &amp; b &amp; c) == 0 的意思不是“全部为 0”,而是“没有设置公共位”
  • 您是否将 bitwise|logical|| 混淆了?
  • a == 0 &amp;&amp; b == 0 &amp;&amp; c ==0 ... 你必须使用 && 来表示 and 和 ||对于或
  • @Jawad 实际上,如果您这样做,您可以使用&amp;,因为您现在正在处理bool 值,这将表现为逻辑与。但是&amp;&amp; 将短路并在第一个false 值处停止比较。始终使用||&amp;&amp; 进行逻辑运算的一个原因是,您不能意外地将它们应用于不是bool 的任何东西。

标签: c# visual-studio logical-operators


【解决方案1】:

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

对于数字操作数,|bitwise "OR" operator,您可以单独阅读。 || 对布尔操作数以外的任何东西都无效,因此养成使用 || 的习惯会很有用,除非您明确不想短路。这样,当您 缩进 以将其用作逻辑运算符时,您就不会意外地将其用作按位运算符。 (例如,在这种情况下可能是编译器错误)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2021-12-21
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多