为什么&存在?我的书告诉我,即使第一个条件为假,& 也会检查两个条件是否为假,但无论如何检查第二个条件是否为假是毫无意义的,因为如果第一个条件为假,则它总是会使整个事情为假。
6 回答
&&
是“布尔与”运算符。如果它的两个操作数都为真,则它的计算结果为真,否则为假。如果第一项为真,它只会评估第二项,因为这是一个有用的优化。
&
是“二元与”运算符。它评估对其操作数应用按位与运算的结果。此值的类型与操作数的类型相同,可以是任何整数类型或布尔值。它总是评估它的两个操作数。
&
对于布尔操作数,和之间唯一真正实际的区别&&
是第一个总是评估两个操作数,而另一个执行短路评估。
当然,对于整数操作数,只能使用&
运算符。整数的按位与示例:
17 & 13 == 1
这是因为 17 是 10001,按位计算,13 是 1101。所以运算是:
10001
& 01001
--------
00001
这同样适用于二进制和布尔 OR 运算符(|
和||
)。
二元 & 运算符也可以用作一元运算符,它返回应用它的变量的地址,就像在 C 中一样。这只能在unsafe
代码中使用。例子:
unsafe {
int a = 3;
int* addressOfA = &a;
}
希望这能把事情弄清楚一点。
它用于按位运算。参考:
http ://www.dotnetperls.com/
和 枚举上最常见的 C# 位运算
不,这并不总是毫无意义的。也许您的第二次检查是即使第一个条件为假也必须执行的操作。
从 MSDN 中查看:http: //msdn.microsoft.com/de-de/library/sbf85k1c (v=vs.80).aspx
if(NecessaryFunction() & SecondNecessaryFunction())
{
// Do something
}
bool NecessaryFunction()
{
// Do smth useful;
}
bool SecondNecessaryFunction()
{
// Do smth required and return bool;
}
在这种情况下,您要执行这两种方法,如果其中一种方法为假,请不要进入if
但是检查第二个条件是否为假是没有意义的,因为如果第一个条件为假,则总是会使整个事情为假
短路运算符是这样的:&&
&
: 是按位运算符。有两个区别:
两个操作数都将被计算。
操作数可能并不
bool
总是。
& 运算符的行为方式如下
当用作一元运算符时,返回地址。但需要不安全。
当在整数上用作二元运算符时,它执行逻辑按位与。例子
当在 Bools 上用作二元运算符时,其行为类似于普通的 &&,但有一个区别。即使第一个条件结果为假,它也会评估第二个条件。
num=0;
if(false && num++)
num will be zero
num=0;
if(false & num++)
num will be one