【问题标题】:When shall we use single and double operator in C#? [duplicate]我们什么时候应该在 C# 中使用单运算符和双运算符? [复制]
【发布时间】:2014-07-15 13:05:14
【问题描述】:

通常当我们使用&&|| 等条件逻辑运算符时,我们可以这样使用它:

if (x > y && y > z)
    //codes

OR

if (x > y || x > z)
    //codes

但是当我在 MSDN 中阅读页面时,他们提到我们可以使用 &|。 我测试过,它确实可以编译,没有任何编译错误。

那么我们什么时候应该使用像&| 这样的单个逻辑运算符来代替&&||

【问题讨论】:

  • 虽然它是重复的,但对不短路的决定有一些非常微妙的影响,这意味着这个问题肯定有足够的内容,这是一个很好的问题。

标签: c# logical-operators


【解决方案1】:

单的是位运算符,双的是逻辑的:

  • 如果您使用bool,请坚持使用&&||
  • 如果要进行位运算,请使用&|

关于位运算符的详细信息,请参阅Wikipedia,例如:

5 & 3 => 1

这样做的原因是 1 是 5 和 3 共享的 2 的唯一幂:

  101 (5)
& 011 (3)
  -------
  001 (1)

希望这会有所帮助。

【讨论】:

  • 错了。 &| 实际上是什么取决于操作数。问题显然是关于布尔值&|
【解决方案2】:

双布尔运算符是短路运算符;这意味着如果第一个操作数失败,它将不会检查其他操作数;这被认为更有效

编辑:

一些downvoters 刺激我添加这部分,

虽然 & 运算符是按位运算符,但它可以用作逻辑运算符,在这种情况下,两个操作数都将被计算而不会短路

参考MSDN:http://msdn.microsoft.com/en-us/library/sbf85k1c.aspx

"二进制 & 运算符是为整数类型和 bool 预定义的。对于整数类型,& 计算其操作数的逻辑按位与。对于 bool 操作数,& 计算其操作数的逻辑与;即结果为真当且仅当它的两个操作数都为真。”

所以问题是隐含地询问操作员之间的区别,两者都可以完成这项工作,但他想知道选择哪个

据我了解,问题是将 (&) 和 (&&) 区分为逻辑运算符,而不是分别列出每个函数的功能

因此,我反对滥用downvoters

【讨论】:

  • 虽然您对短路的说法是正确的,但您对 OP 的问题的回答是不正确的。 &|按位 运算符,其操作方式与 &&|| 完全不同。
  • 我没有投反对票 - 如果我有,我会这么说(我不相信任何匿名的反对票)。 OP 问:“那么我们什么时候应该使用像 & 和 | 这样的单个逻辑运算符而不是 && 和 || ?”,您的 original 答案似乎并没有真正解决。您的编辑以更完整的方式进行。
  • @stackunderflow 我希望有人也会取消对我帖子的反对票。我可以给你一个 +1 来抵消投票给你的任何人。如果有人也可以对我的帖子做同样的事情就好了! :-( +1 from me
  • @Tim:对于这种特殊情况,您的评论不正确。 &| 对整数类型执行按位运算,但这里它们用于布尔值。对于布尔值,短路是唯一的区别。
  • @BenVoigt - 在编辑答案之前,我不知道他们对布尔值进行操作(我认为他们总是进行按位算术,因为这是我曾经为他们提供的唯一用例)。根据扩展信息,我确实对答案进行了投票,这实际上是一个总体上比所选答案 (IMO) 更好的答案。
猜你喜欢
  • 2017-06-28
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2011-01-22
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多