Answers:
我对MSDN C#文档感到有些困惑,该文档指出
&
and|
是逻辑运算符,而&&
and||
是条件运算符。我一直在打电话&&
,||
并且是!
逻辑运算符,所以我错了吗?
没有; 你是对的。
在MSDN文档中存在许多小的,几乎不重要的命名错误。我尝试了尽可能多的方法,但是在这种情况下并没有严重错误和误导的情况,这并不总是明智地利用时间。如果需要有关C#功能名称的明确声明,请转到规范。
因此:相关权限是C#规范,该规范在7.11节中规定:
的
&
,^
和|
运算符称为逻辑运算符。
然后,它将进一步将内置逻辑运算符分解为整数,枚举,布尔值和可空布尔值逻辑运算符。还有用户定义的逻辑运算符。有关详细信息,请参见规格。
在7.12节中,我们有
在
&&
与||
运营商被称为条件逻辑运算符。它们也称为“短路”逻辑运算符。
因此它们都是逻辑运算符。其中一些是条件逻辑运算符。
是什么使条件逻辑运算符成为条件?可能有人会猜测是因为它们通常用于条件语句(if
)或条件表达式(? :
)中。真正的原因由规范给出:
在
&&
与||
运营商的条件版本&
和|
运营商:操作x && y
对应的操作x & y
,但y
如果只计算x
不假。该操作x || y
与操作相对应x | y
,除了y
仅在x
不为true时进行评估。
之所以命名条件逻辑运算符,是因为根据左手操作数的值有条件地评估了右手操作数。
通过注意到条件逻辑运算符只是条件表达式的 “语法糖”,我们可以更生动地看到这一点。 x && y
只是一种更愉快的写作方式x ? y : false
,x || y
也是一种更加愉快的写作方法x ? true : y
。 条件逻辑表达式实际上是条件表达式。
条件逻辑运算符还有用户定义的形式,这有点棘手。有关详细信息,请参见规范。
进一步阅读,如果您对这个主题感兴趣:
在C#中,这些都是 所有 逻辑运算符。
int x = 0xABCD & 0xFF // x == 0xCD
&&
并||
称为“ 条件逻辑运算符”,因为它们会短路。
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
请注意,该术语因语言而异。在C和C ++中 &&
,||
它们只是逻辑运算符。在Java中,&
和|
被称为位运算符,而C和C ++并将其分类为算术运算符。
关键是&
和|
是按位运算符,这意味着它们将应用于并产生位字符串值。在程序员中,按位是一个非常常用的术语。
例如0xff & 0x00 == 0x00
,一会儿0xff | 0x00 == 0xff
。
将&&
和||
应用于条件,并得出条件的通常值;即true
和false
。
例如true && false == false
,一会儿true || false == true
。
因此,&&
和||
可以被称为有条件的经营者,即使不是程序员之间的通常用语。
当然,每个C,C ++,Java和C#程序员都知道这一切。但是我想这种误解的发生是因为“条件运算符”不是我们程序员经常使用的术语。
|
是||
,即使在很多情况下它们都可以在程序行为没有明显变化的情况下进行互换,也不能假设可以与互换。