为什么&存在?我的书告诉我&即使第一个条件为假,也会检查这两个条件是否为假,但无论如何都是无意义的检查第二个条件是否为假,因为如果第一个条件为假,则第一个条件将始终为假。
答案 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)
但无论如何都要检查第二个条件是否为假是毫无意义的,因为如果第一个条件为假,则第一个条件总是会使整个事件为假
短路运算符确实如此:&&
&
:是一个逐位运算符。有两点不同:
将计算操作数。
操作数可能不会始终为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