【问题标题】:How does Bitwise AND interact with boolean values?按位与如何与布尔值交互?
【发布时间】:2014-05-24 07:14:37
【问题描述】:

我遇到了一段我无法理解的代码:

public void Connect()
{
    if (!(!string.IsNullOrEmpty(_vpnConnectionName) & !string.IsNullOrEmpty(_ipToPing)))
    {
        return;
    }

    GetConnected();
}

我研究了 SO 和其他地方的单 & 符号,以及 found it is a Bitwise AND operand。然而,所有的解释都围绕着整数。

我可以理解按位运算对整数的适用性,但它们如何适用于布尔值?

【问题讨论】:

  • 尽量避免在同一个问题中问两个问题。通常只有一个得到答复
  • 查一下德摩根定律,你会发现你的变换是正确的。
  • C#编译器完成后,intbool没有区别。当您对它们进行逻辑处理时,CLR 将它们视为具有预期结果的整数。 VB.NET 的 True 也是 -1 的原因,这是一种历史上不区分逻辑与位与的语言。所以埃里克的评论“是布尔位”的答案是肯定的。

标签: c# bit-manipulation bitwise-and


【解决方案1】:

它是布尔值的逻辑运算符,它计算两边而不考虑左边的值。

【讨论】:

  • @Eric 我相信它是一个按位运算符,当然在 IL 级别上。这适用于在 CLR 上合法的非 0 或 1 的布尔值。真的吗?请参阅pastebin.com/U7vqpn6G 这可以使用可验证的安全 IL 重现。
  • @usr 将零或一以外的东西存储在布尔值中的人正在寻找麻烦,当他们找到它时不应该感到惊讶。
【解决方案2】:

对于bool& 不是按位的 AND 运算符 - 它是非短路逻辑 AND 运算符 - 它总是计算两个参数 - 而不是“通常的”&&仅当第一个参数为 true 时才计算其第二个参数的运算符。

(意识到可能并不明显,上面的第一个& 与实际的documentation 相关联)

【讨论】:

  • @PaulyGlott - 不,如果第一个参数是 false&& 不会计算第二个参数。
  • 虽然 & behaveslogical AND 对于布尔值,但它肯定仍然是 be 按位 AND 运算符。布尔值简单地定义为,对它们的位进行按位运算就像逻辑运算一样。
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2011-04-13
  • 2012-05-16
  • 1970-01-01
  • 2011-09-21
  • 2017-04-22
  • 1970-01-01
相关资源
最近更新 更多