按位包含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?