C#中单个AND运算符的重点是什么?

时间:2012-10-23 06:42:42

标签: c# operators

为什么&存在?我的书告诉我&即使第一个条件为假,也会检查这两个条件是否为假,但无论如何都是无意义的检查第二个条件是否为假,因为如果第一个条件为假,则第一个条件将始终为假。

6 个答案:

答案 0 :(得分:3)

&&是“布尔AND”运算符。如果两个操作数都为真,则计算结果为true,否则为false。如果第一项是真的,它只评估第二项,因为这是一个有用的优化。

&是“二元AND”运算符。它评估将按位AND运算应用于其操作数的结果。此值的类型与操作数的类型相同,可以是任何整数类型或bool。它总是评估它的两个操作数。

对于布尔操作数,&&&之间唯一真正的实际区别是第一个总是计算两个操作数,而另一个执行short-circuit evaluation

对于积分操作数,当然只能使用&运算符。按位AND整数的示例:

17 & 13 == 1

这是因为17是10001,按位,13是1101.所以操作是:

   10001
 & 01001
--------
   00001

这同样适用于二元和布尔OR运算符(|||)。

二进制& operator也可以作为一元运算符运行,它返回它所应用的变量的地址,如C中所示。这只能在unsafe代码中使用。例如:

unsafe {
   int a = 3;
   int* addressOfA = &a;
}

希望能稍微清楚一点。

答案 1 :(得分:1)

答案 2 :(得分:1)

不,这并非总是毫无意义。也许你的第二次检查是一个必须执行的操作,即使第一个条件是假的。

从MSDN中查看:http://msdn.microsoft.com/de-de/library/sbf85k1c(v=vs.80).aspx

答案 3 :(得分:0)

if(NecessaryFunction() & SecondNecessaryFunction())
{
   // Do something
}

bool NecessaryFunction()
{
   // Do smth useful;
}
bool SecondNecessaryFunction()
{
   // Do smth required and return bool;
}

在这种情况下,您想要执行这两种方法,如果其中一种方法是假的,请不要在if

内执行

答案 4 :(得分:0)

  

但无论如何都要检查第二个条件是否为假是毫无意义的,因为如果第一个条件为假,则第一个条件总是会使整个事件为假

短路运算符确实如此:&&

&:是一个逐位运算符。有两点不同:

  1. 将计算操作数。

  2. 操作数可能不会始终为bool

答案 5 :(得分:0)

&运营商的行为方式如下

当用作一元运算符时,返回Address.But需要不安全。

当在整数上用作二元运算符时,它执行逻辑按位AND。Example

当在Bools上用作二元运算符时,其行为类似于普通&&,但有一点不同。即使第一个条件是假的,它也会评估第二个条件。

num=0;
if(false && num++)       
num will be zero

num=0;    
if(false & num++)    
num will be one