std::ios_base::hex
и std::ios_base::showbase
оба являются перечислителями BitmaskType std::ios_base::fmtflags
. A BitmaskType обычно является типом перечисления, чьи перечислители имеют различные степени двоичности, вроде этого: (1 << n
означает 2 n )
// simplified; can also be implemented with integral types, std::bitset, etc.
enum fmtflags : unsigned {
dec = 1 << 0, // 1
oct = 1 << 1, // 2
hex = 1 << 2, // 4
// ...
showbase = 1 << 9, // 512
// ...
};
Оператор |
является оператором бита или, который выполняет операцию или с соответствующими битами, поэтому
hex 0000 0000 0000 0100
showbase 0000 0010 0000 0000
-------------------
hex | showbase 0000 0010 0000 0100
Этот метод может использоваться для объединения флагов, поэтому каждый бит в битовая маска представляет отдельный флаг (установлен или не установлен). Тогда каждый флаг может быть