繁体   English   中英

C#中单个AND运算符的意义是什么?

[英]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;
}

希望这可以使事情变得顺利。

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

从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

但是检查第二个条件是否为假是毫无意义的,因为第一个条件如果为假,将始终使整个事物为假

对于短路操作员来说确实如此: &&

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

  1. 将同时计算两个操作数。

  2. 操作数不一定总是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM