質問: {1234.235, 5568.6205, 78999.312}; cout << 0.00001234567890 << "\n\n"; // 通常表示 put_ary(a, sizeof(a) / sizeof(a[0])); cout << '\n'; cout << 0.00001234567890 << '\n'; // 通常表示 } ```
回答: これはビット列(別名:ビットフィールド、ビットマスク、ビットベクタ)でビットフラグを立てるときの定型的な書き方です。ビット列は、2値(true,false)で表せる状態を格納するのに効率的なのでよく使われます。 簡単のために4ビットのビット列があったとします。 0b1000,0b0100,0b0010,0b0001 (0bは2進数であることを表す) 例えば4ビット目が1の場合は、固定小数点として表示する 2ビット目が1の場合は、右揃えとして表示する と処理系が解釈すると仮定してください。(あくまで仮定です。) この時例えば 0b1000 | 0b0010 とするとこれは0b1010と等しくなります。 (各桁のビット毎にORをとるのだと解釈すればよいです。) この値を書式の値として処理系に与えると、固定小数点かつ右揃えという書式に設定せよという意思表示になります。(つまり2つのフラグを立てたことになる) ios_base::fmtflagsという型の詳細が隠蔽されているので、本当にfmtflagsがビット列なのか、ios_base::rightがどのビットに対応しているのかなどがわからないですが、ビット列だと考えておいて実務上問題はないと思います。 以下は参考になるwebサイトです。 C/C++のオペレータ一覧 Bitwise OR (上のリンクで|で検索をかけるとこのページが見つかる) ビットフィールド