【问题标题】:C# & operator clarificationC# & 运算符说明
【发布时间】:2012-09-17 23:32:04
【问题描述】:

我在这里看到了几个关于 C# 中 && 和 & 运算符之间区别的问题,但我仍然很困惑它是如何使用的,以及在不同情况下会产生什么结果。比如我刚刚在一个项目中瞥见了下面的代码

bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);

什么时候结果为0,什么时候>0?这个运算符背后的逻辑是什么?运算符'|'有什么区别?

bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

我们可以使用 &&, ||运算符并获得相同的结果(可能使用不同的代码)?

【问题讨论】:

  • 第二组bMyBooleans 平凡地评估为真。

标签: c# .net logic


【解决方案1】:

&& 是一个条件语句,用于if 语句和while

if(x>1 && y<3)

这意味着 x 应该大于 1 并且 y 应该小于 3,同时满足这两个条件

if(x>1 || y<3)

满足其中之一

但是,& 和 |分别是按位与和或。 例如:

 1 | 0  => 1
 1 & 0  => 0
 1 & 1  => 1

如果这适用于直整数,则将计算并应用其对应的二进制值

2&1
=>   10  // the binary value of 2
     &
     01  // the binary value of 1
     --
     00  // the result is zero

【讨论】:

  • 我认为这并不能很好地解释差异。当您在布尔值上使用 &amp; 时会发生什么?在整数上使用 &amp;&amp; 会发生什么?
  • 如果有人想知道为什么10 &amp; 01 == 00,您可能会了解bitwase操作是如何完成的here
【解决方案2】:

& 符号对其二进制表示中的整数进行按位与。 管道按位或。

在这里查看这些按位运算的含义:http://en.wikipedia.org/wiki/Bitwise_operation

【讨论】:

    【解决方案3】:

    & 和 |是位操作。您必须在位掩码上使用它。 && 和 ||是逻辑运算,因此您只能将其用于布尔值。

    位操作示例:

    var a = 1;
    var b = 2;
    var c = a|b;
    

    二进制表示 a = 00000001, b = 00000010 c = 00000011

    因此,如果您使用位掩码 c,它将传递值 1、2 或 3。

    【讨论】:

      【解决方案4】:

      另一个区别是 & 运算符计算其操作数的逻辑按位与,如果操作数不是 bool(在您的情况下为整数)

      【讨论】:

        【解决方案5】:

        &amp; operator is BItwise AND 运算符,它对位进行操作。 例如5 & 3

                0101    //5
                0011   //3
            ----------
        5&3=    0001   //1
        

        | operator is BItwise OR 运算符,它对位进行操作。 5|3

                0101    //5
                0011   //3
            ----------
          5|3=  0111   //7
        

        &amp;&amp; 运算符是logical AND operator- 它是returns true if all conditions are true
        例如

               if((3>5)&&(3>4))   //returns true
               if((6>5)&&(3>4))   //returns false
        

        || 运算符是logical OR operator-它是returns true if one of the conditions is true
        例如

           if((3>5)||(3>4))   //returns true
           if((6>5)||(3>4))   //returns true
           if((6>5)||(5>4))   //returns false
        

        【讨论】:

          【解决方案6】:

          其他答案为您解释了 && 和 & 之间的区别,因此假设您理解这一点。在这里,我只是尝试解释一下您指定的情况。

          第一种情况

          bMyBoolean = Convert.ToBoolean(nMyInt & 1);
          

          bMyBoolean falsenMyInt = 0 因为:

            00 
          & 01 
          = 00;
          

          第二种情况:

          bMyBoolean = Convert.ToBoolean(nMyInt & 2);
          

          bMyBooleanfalsenMyInt = 01 因为

            00 
          & 10 
          = 00;
          

          或者:

            01 
          & 10 
          = 00;
          

          按位的第三种和第四种情况|是微不足道的,因为 bMyBoolean 对于任何 nMyInt 总是为真

          bMyBoolean = Convert.ToBoolean(nMyInt | 1);
          bMyBoolean = Convert.ToBoolean(nMyInt | 2);
          

          你不能申请 && 或 ||在这种情况下,因为它们仅对bool 有约束,您将编译错误。

          【讨论】:

            【解决方案7】:

            有一些有趣的事情。按位 as & be,可以使用 如下例所示。

            bool result = true;
            result &= false;
            Console.WriteLine("result = true & false => {0}", result );
            //result = true & false => False
            
            result = false;
            result &= false;
            Console.WriteLine("result = false & false => {0}", result );
            //result = false & false => False
            
            
            result = true;
            result &= true;
            Console.WriteLine("result = true & true => {0}", result );
            //result = true & true => True
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-04
              • 2018-03-25
              • 2017-08-28
              • 2021-08-23
              • 2020-04-09
              相关资源
              最近更新 更多