我偶然发现了这个:
bool Isvalid = isValid & CheckSomething()
bool Isvalid = isValid && CheckSomething()第二种情况可能是短路的情况。
所以我们不能总是使用&而不是&&吗
发布于 2011-04-04 19:12:12
&是按位AND运算,这意味着它在位级别上工作。&&是一个逻辑AND,这意味着它在布尔值(真/假)级别工作。逻辑AND使用短路(如果第一部分为假,则检查第二部分没有用)来防止运行过多的代码,而逐位AND需要对每一位进行操作以确定结果。
您应该使用逻辑AND (&&),因为这是您想要的,而&可能会做错误的事情。但是,如果您想要评估其副作用,则需要单独运行第二种方法:
var check = CheckSomething();
bool IsValid = isValid && check;发布于 2018-05-01 06:03:51
对于bool,C#有两种类型的逻辑连接(AND)运算符
x & y Logical AND- Results in `true` only if `x` and `y` evaluate to `true`
- Evaluates **both** `x` and `y`.x && y Conditional Logical AND- Results in `true` only if `x` and `y` evaluate to `true`
- Evaluates `x` first, and if `x` evaluates to `false`, it returns `false` immediately without evaluating `y` (_short-circuiting_)因此,如果您同时依赖于要计算的x和y,则可以使用&运算符,尽管它很少使用,而且很难读懂,因为它的副作用对读者来说并不总是很清楚。
注意:对于integer types (int、long等),也存在二元&运算符。其中它执行逐位逻辑AND。
发布于 2011-04-04 19:11:42
在&&中,仅当第一个表达式为真时才计算第二个表达式。
And &只是连接两个表达式的一种方式,比如true & true = true,true & false = false等等。
https://stackoverflow.com/questions/5537607
复制相似问题