C# 我们什么时候在C中使用单运算符和双运算符?

C# 我们什么时候在C中使用单运算符和双运算符?,c#,logical-operators,C#,Logical Operators,通常,当我们使用诸如&&和| |等条件逻辑运算符时,我们可以这样使用它: if (x > y && y > z) //codes OR if (x > y || x > z) //codes 但当我在读MSDN的一页时,他们提到我们可以使用&and |。 我进行了测试,它编译时没有给出任何编译错误 那么,我们什么时候应该使用像&和|这样的单个逻辑运算符来代替&和| |?单个运算符是位运算符,而双运算符是逻辑运算符: 如果您使用bool

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

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

OR

if (x > y || x > z)
    //codes
但当我在读MSDN的一页时,他们提到我们可以使用&and |。 我进行了测试,它编译时没有给出任何编译错误


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

单个运算符是位运算符,而双运算符是逻辑运算符:

如果您使用bool,请坚持使用&&和| |。 如果要执行位算术,请使用&和|。 有关按位运算符的详细信息,请参见,例如:

原因是1是2的唯一幂,由5和3共享:

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

希望这有帮助。

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

编辑:

一些选民怂恿我加入这一部分

虽然&运算符是位运算符,但它可以用作逻辑运算符,在这种情况下,两个操作数都将在不短路的情况下进行求值

参考MSDN:

二进制和运算符是为整型和布尔预定义的。对于整数类型,&计算其操作数的逻辑位与。对于布尔操作数,&计算其操作数的逻辑AND;也就是说,当且仅当其两个操作数都为真时,结果才为真

因此,问题是暗含地问两个操作员之间的区别,他们都可以做这项工作,但他想知道选择哪一个

我理解的问题是区分&和&&as逻辑运算符,而不是单独列出每个运算符的功能


因此,我对滥用职权表示反对

虽然你关于短路的说法是正确的,但你对OP问题的回答是错误的和|或位运算符,并以与和&| |完全不同的方式操作。我没有投反对票——如果我投了,我会这么说,我不相信任何匿名的反对票。OP问:那么什么时候我们应该使用像&和|这样的单一逻辑运算符,而不是你最初的答案似乎没有真正解决的&和| |。你的编辑方式要完整得多。@stackunderflow我希望有人也能在我的帖子上投下反对票。我可以给你一个+1来中和投票反对你的人。要是有人也能对我的帖子做同样的事就好了+1来自me@Tim:您的评论对于这个特殊情况是不正确的和|对整数类型执行位运算,但这里它们用于布尔运算。对于布尔运算,短路是唯一的区别。@BenVoigt-在编辑答案之前,我不知道他们对布尔运算,我认为他们总是按位运算,因为这是我对他们唯一的使用案例。根据扩展的信息,我对答案进行了投票,这实际上是一个比IMO选择的答案更好的答案。和实际上是什么取决于操作数。这个问题显然是关于布尔值和|的。虽然它是重复的,但对于不短路的决定有一些非常微妙的含义,这意味着这个问题肯定有足够的内容,这是一个好问题。
  101 (5)
& 011 (3)
  -------
  001 (1)