15

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

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

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

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

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

4

7 回答 7

12

The&&是一个条件语句,用于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
于 2012-09-26T10:57:25.943 回答
8

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

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

于 2012-09-26T10:58:33.027 回答
4

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

位操作示例:

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

在二进制格式中,这意味着 a = 00000001, b = 00000010 c = 00000011

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

于 2012-09-26T10:56:03.650 回答
2

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

于 2012-09-26T10:58:29.187 回答
2

& 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

&&运算符是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
于 2012-09-26T11:00:58.163 回答
1

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

第一个案例

bMyBoolean = Convert.ToBoolean(nMyInt & 1);

bMyBoolean false什么时候nMyInt = 0因为:

  00 
& 01 
= 00;

第二种情况:

bMyBoolean = Convert.ToBoolean(nMyInt & 2);

bMyBoolean false何时nMyInt = 01因为

  00 
& 10 
= 00;

或者:

  01 
& 10 
= 00;

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

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

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

于 2012-09-26T11:21:59.597 回答
0

这里有一些有趣的&。按位 as & be,它可以用于 bool,如下例所示。

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
于 2013-05-29T16:39:26.590 回答