47993


(参考書:新版明解c++中級 457ページです)
このコードは参考書のサンプルコードを書き写しました、コメント部の`//ここです↓`という部分の`|`演算子はどのような働きをしてるのかがわかりません。  
`&&` と `||` なら知っているのですが,ビット演算の論理和についても知っているのですがこの場合はどのような動きをするのでしょうか？

[code]

            #include <iostream>
    
            using namespace std;
    
            //--- double型配列の全要素を#######.##形式で各行に１要素ずつ表示 ---//
            void put_ary(double ary[], int n)
            {
                // 設定する書式（右揃え＋10進数＋固定小数点記法）
                                                 //ここです↓
                ios_base::fmtflags flags = ios_base::right | ios_base::dec | ios_base::fixed;
    
                // 現在の書式と最小幅を保存
                ios_base::fmtflags old_flags = cout.flags();    // 現在の書式
                streamsize old_size = cout.width();             // 現在の最小幅
    
                // 精度を設定するとともに現在の精度を保存
                streamsize old_prec = cout.precision(2);        // 精度は2桁
    
                for (int i = 0; i < n; i++) {
                    cout.width(10);             // 最小幅を10に設定
                    cout.flags(flags);          // 書式をflagsに設定
                    cout << ary[i] << '\n';
                }
    
                cout.flags(old_flags);      // フラグを戻す
                cout.width(old_size);       // 最小幅を戻す
                cout.precision(old_prec);   // 精度を戻す
            }
    
            int main()
            {
                double a[] = {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';       // 通常表示
            }
    
[/code]


CC BY-SA 4.0
2018-08-31T13:23:24.823
47982
2018-08-31T17:14:21.417
2018-08-31T15:26:07.473
question
c++
c++,知らない演算子の意味


これはビット列(別名：ビットフィールド、ビットマスク、ビットベクタ)でビットフラグを立てるときの定型的な書き方です。ビット列は、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++のオペレータ一覧  
<https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B>  
Bitwise OR (上のリンクで|で検索をかけるとこのページが見つかる)  
<https://en.wikipedia.org/wiki/Bitwise_operation#OR>  
<https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97#OR>  
ビットフィールド  
<https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89>


CC BY-SA 4.0
2018-08-31T17:14:21.417
47993
2018-08-31T17:14:21.417
25980
47982
answer