我注意到按位运算不如逻辑“与\或”运算聪明,我想知道为什么?
以下是一个示例:
我想知道为什么它们不以相同的逻辑方式工作。
以下是一个示例:
// For the record
private bool getTrue(){return true;}
private bool getFalse(){return false;}
// Since a is true it wont enter getFalse.
bool a = getTrue() || getFalse();
// Since a is false it wont enter getTrue.
bool b = getFalse() && getTrue();
// Since b is false it wont enter getTrue.
b = b && getTrue();
然而,位运算符"|="和"&="并不那么智能:
bool a = getTrue();
a |= getFalse(); // a has no chance to get false but it still enters the function.
a = getFalse();
a &= getTrue(); // a has no chance to get true but still performs this operation.
我想知道为什么它们不以相同的逻辑方式工作。
2 & true
这样的操作会发生什么?也就是说,当你正在评估的&
具有int和bool操作数时。&
被定义为两个int操作数或两个bool操作数,但不是一个int和一个bool,因此需要将其中一个操作数转换为bool或int以使它们匹配,对吗?那么,我的问题是:2 & true
会变成int & int
,即2 & 1
,即0
(如果转换为bool则为false),还是bool & bool
,即true & true
,即true
在C#中? - Apriori2 & true
无法编译。在 C# 中,您不能将bool
转换为int
或反之。 - D Stanley