【问题标题】:| operator versus || operator|运算符与 ||操作员
【发布时间】:2010-09-05 03:54:40
【问题描述】:

简单的问题,但 | 运算符与 ||(或)运算符相比有什么作用?

【问题讨论】:

    标签: c operators


    【解决方案1】:

    | 是按位 OR 运算符,其中 || 是逻辑 OR 运算符。也就是说,前者用于将来自两个数值的位“组合”为一个并集,而后者则在运算符左侧或右侧的任一条件为真时计算为真。

    具体来说,位运算符(不要与逻辑运算符混淆)对数字的每一位(在相同的序数位置)进行运算,并相应地计算结果。在按位OR 的情况下,如果任一位为 1,则结果位为 1,仅当两个位均为 0 时结果位为 0。例如,1|2 = 3,因为:

    1 = 0001
    2 = 0010
    --------
        0011 = 3
    

    此外,2|3 = 3,因为:

    2 = 0010
    3 = 0011
    --------
        0011 = 3
    

    起初这似乎令人困惑,但最终你会掌握它的窍门。按位OR 主要用于在位字段上设置标志的情况。即,在单个值(通常是 32 位数字)中保持一组相关条件的开/关状态的值。在 Win32 中,窗口样式值是位域的一个很好的例子,其中每个样式都由一个位(或标志)表示,如 WS_CAPTION,它指示窗口是否有标题栏。

    【讨论】:

      【解决方案2】:

      一个字中有几个(通常是 32、16、8 或 64)位。按位或(一个垂直条)返回该位位置中每个位位置的逻辑或。逻辑 OR(两个竖线)只返回 TRUE 或 FALSE。

      【讨论】:

        【解决方案3】:

        |bitwise or 运算符。维基百科页面Operators in C and C++ 很好地描述了所有运算符。

        【讨论】:

          【解决方案4】:

          正如其他人所提到的,|按位 OR 运算符,||逻辑 OR 运算符,它们在概念上是不同的运算(通常)对不同类型的输入进行操作。但这可能会引发另一个问题:如果您将 | 与布尔操作数一起使用,那会不会与 || 做同样的事情,因为一切最终都归结为比特?是否需要一个独特的 || 运算符?

          除了概念上的差异之外,另一个重要的差异是||短路。这意味着如果第一个操作数为真,则根本不计算第二个操作数。例如:

          int flag = Foo() || Bar();
          

          仅当 Foo() 返回 0 时才会调用 Bar()。如果使用 |,则始终会计算两个操作数。

          (当然,&&& 也有类似的行为。)

          【讨论】:

          • +1 希望我能不止一次投票。非常重要的一点!
          【解决方案5】:

          ||是逻辑或和 |是按位或。大多数时候,当您检查 if (i == 0 || i ==1) 之类的内容时,您只想使用 ||但是当您执行诸如将标志作为变量传递之类的操作时,请使用 |. (如果你不知道那是什么,你可能根本不需要 |)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-22
            • 2015-12-06
            • 1970-01-01
            • 2015-08-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多