按位包含OR运算符的目的是什么?

根据我的理解,包含OR的运算符比较第一个和第二个操作数中的每一位,如果其中一个位为1,则返回1. Bjarne Stroustrup使用它(ist是istream对象):

ist.exceptions(ist.exceptions()|ios_base::bad_bit);

我在编程方面并没有真正使用过很多东西,它应该在我的待办事项列表上学习吗? 我明白,如果我有一个int值为9,那么二进制文件就是00001001,但这非常重要。 我不明白他为什么会在他使用它的上下文中使用这个操作符。


您可以将其视为将选项添加到一组现有选项的一种方法。 一个比喻就是如果你熟悉linux:

PATH = "$PATH:/somenewpath"

这说'我想要现有的路径和这条新路径/一些新路径'

在这种情况下,他说'我想要异常中的现有选项,并且我也想要bad_bit选项'


在这种情况下,它仅仅意味着“打开一点点”。

只是一个例子:我有一个字节0100 0011作为8个布尔值。 我想打开第4位(即使第4布尔值为真)

按位操作,它看起来像这样: [0100 0011] Bitwise-OR [0000 1000] ,它会给你0100 1011 。 这意味着,无论其原始值如何,它都会将第4位更改为真


std::ios::exceptions是一个函数,它在file对象使用的文件中获取/设置一个异常掩码,以决定它应该在哪种情况下抛出异常。

这个函数有两个实现:

  • iostate exceptions() const; // get current bit mask
  • void exceptions (iostate except); // set new bit mask
  • 您已经发布的语句使用ios_base::badbit标志与当前标志组合在一起,为文件对象设置新的异常掩码,这些标志当前在文件对象中设置。

    OR位运算符通常用于创建使用已存在的位域和新标志创建位域。 它也可以用来将两个标志组合成一个新的位域。

    这里有一个解释的例子:

    // Enums are usually used in order to represent 
    // the bitfields flags, but you can just use the
    // constant integer values.
    // std::ios::bad_bit is, actually, just a constant integer.
    enum Flags {
        A,
        B,
        C
    };
    
    // This function is similar to std::ios::exceptions
    // in the sense that it returns a bitfield (integer,
    // in which bits are manipulated directly).
    Something foo() {
      // Return a bitfield in which A and B flags
      // are "on".
      return A | B;
    }
    
    int main() {
      // The actual bitfield, which is represented as a 32-bit integer
      int bf = 0;      
    
      // This is what you've seen (well, somethng similar).
      // So, we're assigning a new bitfield to the variable bf.
      // The new bitfield consists of the flags which are enabled
      // in the bitfield which foo() returns and the C flag.
      bf = foo() | C;
    
      return 0;
    }
    
    链接地址: http://www.djcxy.com/p/75011.html

    上一篇: What is the purpose of the bitwise inclusive OR operator?

    下一篇: Bitwise operation gives incorrect result