C# 按位和如何与布尔值交互?
我遇到了一段无法理解的代码:C# 按位和如何与布尔值交互?,c#,bit-manipulation,bitwise-and,C#,Bit Manipulation,Bitwise And,我遇到了一段无法理解的代码: public void Connect() { if (!(!string.IsNullOrEmpty(_vpnConnectionName) & !string.IsNullOrEmpty(_ipToPing))) { return; } GetConnected(); } 我已经研究过单安培等其他地方,和。然而,这些解释都是围绕整数展开的 我可以理解逐位运算对整数的适用性,但它们如何适用于布尔运算?对于
public void Connect()
{
if (!(!string.IsNullOrEmpty(_vpnConnectionName) & !string.IsNullOrEmpty(_ipToPing)))
{
return;
}
GetConnected();
}
我已经研究过单安培等其他地方,和。然而,这些解释都是围绕整数展开的
我可以理解逐位运算对整数的适用性,但它们如何适用于布尔运算?对于bool
,不是逐位和
运算符-它是非短路逻辑和
运算符-它总是计算两个参数-与“通常”相反&&
运算符,仅在第一个参数为true时计算第二个参数
(意识到上面的第一个&
链接到实际值可能并不明显)这是布尔上的一个逻辑运算符,无论左侧的值是多少,都会对两侧进行计算 @PaulyGlott-不,&
如果第一个参数为false
,则不会计算其第二个参数。此外,尽管&
的行为类似于逻辑和布尔运算的,但它肯定仍然是位和
运算符。bool的定义很简单,它们的位上的按位操作的行为类似于逻辑操作。尽量避免在同一个问题中问两个问题。通常只有一个会得到回答。查找demorgans定律,你会发现你的转换是正确的。在C#编译器完成后,int和bool之间没有区别。CLR将它们视为int,当您逻辑地和它们进行比较时,会得到预期的结果。另外,VB.NET之所以为真的原因是-1,这是一种历史上不区分逻辑和按位与的语言。所以Eric的评论“是布尔位”的答案是肯定的。@Eric我相信这是一个位运算符,当然是在IL级别。这适用于在CLR上合法的非0或1的布尔值。这是真的吗?请看,使用可验证的、安全的IL,这是可以复制的。@usr在布尔值中存储零或一以外的东西的人正在寻找麻烦,当他们发现它时,不应该感到惊讶。