[英]What is the point of the single AND operator in C#?
为什么&存在? 我的书告诉我&即使第一个条件为假,&也会检查两个条件是否都为假,但是无论如何,检查第二个条件是否为假是毫无意义的,因为如果第一个条件为假,则第一个条件总是会使整个事物为假。
&&
是“布尔AND”运算符。 如果两个操作数都为true,则结果为true,否则为false。 如果第一个条件为真,则仅评估第二个条件,因为这是有用的优化。
&
是“二进制AND”运算符。 它评估对其操作数应用按位与运算的结果。 此值的类型与操作数的类型相同,可以是任何整数类型或布尔值。 它总是对两个操作数求值。
对于布尔操作数, &
和&&
之间唯一真正的实际区别是,第一个始终评估两个操作数,而另一个则进行短路评估 。
当然,对于整数操作数,只能使用&
运算符。 整数按位与的示例:
17 & 13 == 1
这是因为17是10001,按位,13是1101。因此操作是:
10001
& 01001
--------
00001
二进制和布尔OR运算符( |
和||
)也是如此。
二进制&运算符也可以用作一元运算符,在该运算符中它返回要应用的变量的地址,如C中所示。只能在unsafe
代码中使用。 例:
unsafe {
int a = 3;
int* addressOfA = &a;
}
希望这可以使事情变得顺利。
用于按位操作。 参考:
http://www.dotnetperls.com/and
枚举上最常见的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.