C# & 运算符说明

Posted

技术标签:

【中文标题】C# & 运算符说明【英文标题】:C# & operator clarification 【发布时间】: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 平凡地评估为真。 【参考方案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

【讨论】:

以上是关于C# & 运算符说明的主要内容,如果未能解决你的问题,请参考以下文章

C# * 和 & 运算符用于指向数组

C# 8小特性

如何在 C# 中为枚举重载运算符?

C#中&和&&的区别

php && 逻辑与运算符使用说明

转载:C#中&与&&的区别