Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按位和如何与布尔值交互?_C#_Bit Manipulation_Bitwise And - Fatal编程技术网

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在布尔值中存储零或一以外的东西的人正在寻找麻烦,当他们发现它时,不应该感到惊讶。