C#&运营商澄清

时间:2012-09-26 10:51:31

标签: c# .net logic

我在这里看到了几个关于&&和和& C#中的运算符,但我仍然对它的使用方式感到困惑,以及在不同情况下会产生什么结果。例如,我只是在项目中瞥见了以下代码

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

当它结果为0且何时> 0?这个运营商背后的逻辑是什么?运营商' |'?

之间有什么不同
bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

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

7 个答案:

答案 0 :(得分:11)

&&是有条件的,用于if语句和while

if(x>1 && y<3)

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

if(x>1 || y<3)

满足其中一个

然而,&amp;和|分别是按位AND和OR。 例如:

 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

答案 1 :(得分:6)

&符号在二进制表示中对整数执行按位AND运算。 管道按位OR。

请在此处查看这些按位操作的含义:http://en.wikipedia.org/wiki/Bitwise_operation

答案 2 :(得分:4)

&安培;和|是位操作。你必须在位掩码上使用它。 &安培;&安培;和||是逻辑运算,因此您只能将它用于bool值。

位操作示例:

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

& operator is BItwise AND运算符,它对位进行操作。 例如5&amp; 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

答案 5 :(得分:1)

其他答案向您解释&amp;&amp;和和&amp;,所以假设你明白这一点。在这里,我只想解释你指定的案例。

第一种情况

bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean因为:

时,

false nMyInt = 0

  00 
& 01 
= 00;

第二种情况:

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

nMyInt = 0 1因为

  00 
& 10 
= 00;

或者:

  01 
& 10 
= 00;

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

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

你无法申请&amp;&amp;或||在这种情况下,因为它们只是bool的约束,所以你将编译错误。

答案 6 :(得分:0)

&amp; 即可。按位和&amp;是的,它可以使用 按照下面的例子来布尔。

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