2

为什么&存在?我的书告诉我,即使第一个条件为假,& 也会检查两个条件是否为假,但无论如何检查第二个条件是否为假是毫无意义的,因为如果第一个条件为假,则它总是会使整个事情为假。

4

6 回答 6

3

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

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

&对于布尔操作数,和之间唯一真正实际的区别&&是第一个总是评估两个操作数,而另一个执行短路评估

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

17 & 13 == 1

这是因为 17 是 10001,按位计算,13 是 1101。所以运算是:

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

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

二元 & 运算符也可以用作一元运算符,它返回应用它的变量的地址,就像在 C 中一样。这只能在unsafe代码中使用。例子:

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

希望这能把事情弄清楚一点。

于 2012-10-23T07:04:59.023 回答
1

它用于按位运算。参考:
http ://www.dotnetperls.com/
和 枚举上最常见的 C# 位运算

于 2012-10-23T06:45:25.503 回答
1

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

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

于 2012-10-23T06:46:26.723 回答
0
if(NecessaryFunction() & SecondNecessaryFunction())
{
   // Do something
}

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

在这种情况下,您要执行这两种方法,如果其中一种方法为假,请不要进入if

于 2012-10-23T06:46:42.250 回答
0

但是检查第二个条件是否为假是没有意义的,因为如果第一个条件为假,则总是会使整个事情为假

短路运算符是这样的:&&

&: 是按位运算符。有两个区别:

  1. 两个操作数都将被计算。

  2. 操作数可能并不bool总是。

于 2012-10-23T06:48:32.797 回答
0

& 运算符的行为方式如下

当用作一元运算符时,返回地址。但需要不安全。

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

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

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

num=0;    
if(false & num++)    
num will be one
于 2012-10-23T07:05:55.287 回答