C++学習ノートの演算子

8482 ワード

特定の数値または論理操作を実行するために使用されるC++の主な演算子は次のとおりです.
  • 演算子
  • 関係演算子
  • 論理演算子
  • ビット演算子
  • 賦値演算子
  • その他演算子
  • 演算子:
    主な演算子:+(プラス)、-(マイナス)、*(乗算)、/(除算)、%(除算)、+(自己加算)、--(自己減算)
    /および%演算子の詳細:
  • 両オペランドが正数であれば除算の結果が正数となる.
  • 型を求めた結果も正数であり、2つの操作数が負であれば除算の結果は正数である.
  • 型を求める結果、負数が1つの操作数だけ負数であれば、除算と型を求める結果は機械に依存する.
  • 除算は、負の論理和論理またはオペレータが常に左のオペランドを計算してから右のオペランドを計算することを決定することができる.
  • は、左のオペランドの値だけで論理式の結果を決定できない場合にのみ、if(i)のような右のオペランド区分を解く.
  • int val = 2;
    if(val==true){              //if         。
    cout<

    --演算子の詳細:
    --、++演算子は、この式を実行するときにaを2回連続して減算し、下向きに実行するなど、1回の計算で重畳できます.
    例:
    #include 
    using namespace std;
     
    int main()
    {
       int a = 21;
       int b = 10;
       int c;
     
       c = a + b;
       cout << "Line 1 - c     " << c << endl ;
       c = a - b;
       cout << "Line 2 - c     " << c << endl ;
       c = a * b;
       cout << "Line 3 - c     " << c << endl ;
       c = a / b;
       cout << "Line 4 - c     " << c << endl ;
       c = a % b;
       cout << "Line 5 - c     " << c << endl ;
     
       int d = 10;   //      、  
       c = d++;
       cout << "Line 6 - c     " << c << endl ;
     
       d = 10;    //     
       c = d--;
       cout << "Line 7 - c     " << c << endl ;
       return 0;
    }

    結果は次のとおりです.
    Line 1 - c     31
    Line 2 - c     11
    Line 3 - c     210
    Line 4 - c     2
    Line 5 - c     1
    Line 6 - c     10
    Line 7 - c     10

    関係演算子
    メイン演算子:==、!=、>、<、>=、<=(後ろの2つの注意順は逆に書かないでください)
    例:
    #include 
    using namespace std;
     
    int main()
    {
       int a = 21;
       int b = 10;
       int c ;
     
       if( a == b )
       {
          cout << "Line 1 - a    b" << endl ;
       }
       else
       {
          cout << "Line 1 - a     b" << endl ;
       }
       if ( a < b )
       {
          cout << "Line 2 - a    b" << endl ;
       }
       else
       {
          cout << "Line 2 - a     b" << endl ;
       }
       if ( a > b )
       {
          cout << "Line 3 - a    b" << endl ;
       }
       else
       {
          cout << "Line 3 - a     b" << endl ;
       }
       /*    a   b    */
       a = 5;
       b = 20;
       if ( a <= b )
       {
          cout << "Line 4 - a       b" << endl ;
       }
       if ( b >= a )
       {
          cout << "Line 5 - b       a" << endl ;
       }
       return 0;
    }

    結果は次のとおりです.
    Line 1 - a     b
    Line 2 - a     b
    Line 3 - a    b
    Line 4 - a       b
    Line 5 - b       a

    論理演算子(0ではなく真、逆は偽)
    主な演算子:&&、|、!
    &&演算子の詳細:
    左の値が偽であるかどうかを判断し、偽であれば式全体の値が偽であることを直接取得し、&&演算子の右側の式は実行されません.逆に、式を実行し続け、最終結果を計算します.このプロパティを使用して、右側の式をif文の条件と見なし、右側の式が真であるかどうかを判断できます.
    演算子の詳細:
    左の値が真かどうかを判断し、真であれば式全体の値が偽であることを直接得、演算子の右側の式は実行されません.逆に、式を実行し続け、最終結果を計算します.
    例:
    #include 
    using namespace std;
     
    int main()
    {
       int a = 5;
       int b = 20;
       int c ;
     
       if ( a && b )
       {
          cout << "Line 1 -     "<< endl ;
       }
       if ( a || b )
       {
          cout << "Line 2 -     "<< endl ;
       }
       /*    a   b    */
       a = 0;
       b = 10;
       if ( a && b )
       {
          cout << "Line 3 -     "<< endl ;
       }
       else
       {
          cout << "Line 4 -      "<< endl ;
       }
       if ( !(a && b) )
       {
          cout << "Line 5 -     "<< endl ;
       }
       return 0;
    }

    結果は次のとおりです.
    Line 1 -     
    Line 2 -     
    Line 4 -      
    Line 5 -     

    ビット演算子(何進数でもバイナリに変換してから計算!!)
    主な演算子:&、!、|、>>(右に移動),<
    >>および<
  • <>は、頭部の数字を切り捨て、移動によって生じた空孔を0に補うことができる.
  • ヘッダの数値を切り捨てるかどうかは、変数のバイナリビット数に関係します.
  • バイナリビット数が満たされる場合、左シフトnビットは原数に相当する×2のn乗です.

  • &演算子の詳細:
        00001011
    &  00000011
    =  00000011 = 3

    |演算子の詳細:
        00001011
    |   00000011
    =  00001011 = 11

    ^演算子の詳細:
  • ^演算の2つの数は同じ結果が0であり、逆は1である.
  • 任意の数異または0で得られた値は変わらない.
  • a ^ 0 = a

    任意の数が異なるか、同じ数を2回数えても得られる数は変わらない.
    a ^ b ^ b = a

    例:
    #include 
    using namespace std;
     
    int main()
    {
       unsigned int a = 60;      // 60 = 0011 1100  
       unsigned int b = 13;      // 13 = 0000 1101
       int c = 0;           
     
       c = a & b;             // 12 = 0000 1100
       cout << "Line 1 - c     " << c << endl ;
     
       c = a | b;             // 61 = 0011 1101
       cout << "Line 2 - c     " << c << endl ;
     
       c = a ^ b;             // 49 = 0011 0001
       cout << "Line 3 - c     " << c << endl ;
     
       c = ~a;                // -61 = 1100 0011
       cout << "Line 4 - c     " << c << endl ;
     
       c = a << 2;           // 240 = 1111 0000
       cout << "Line 5 - c     " << c << endl ;
     
       c = a >> 2;            // 15 = 0000 1111
       cout << "Line 6 - c     " << c << endl ;
     
       return 0;
    }

    結果は次のとおりです.
    Line 1 - c     12
    Line 2 - c     61
    Line 3 - c     49
    Line 4 - c     -61
    Line 5 - c     240
    Line 6 - c     15

    代入演算子
    メイン演算子:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
    代入演算子の詳細:
    複数の代入演算子が連続的に代入される場合、各オブジェクトは同じデータ型、または同じタイプに変換可能なデータ型を持つ必要があります.
    int ival; int *pval;
    ival = pval = 0;  //error   ival pval      0
    string s1,s2;
    s1 = s2 = "OK"   

    例:
    #include 
    using namespace std;
     
    int main()
    {
       int a = 21;
       int c ;
     
       c =  a;
       cout << "Line 1 - =       ,c    = : " <>=  2;
       cout << "Line 8 - >>=      ,c    = : " <

    結果は次のとおりです.
    Line 1 - =       ,c    = 21
    Line 2 - +=      ,c    = 42
    Line 3 - -=      ,c    = 21
    Line 4 - *=      ,c    = 441
    Line 5 - /=      ,c    = 21
    Line 6 - %=      ,c    = 11
    Line 7 - <<=      ,c    = 44
    Line 8 - >>=      ,c    = 11
    Line 9 - &=      ,c    = 2
    Line 10 - ^=      ,c    = 0
    Line 11 - |=      ,c    = 2

    その他の演算子:
    主な演算子:
    演算子
    説明
    sizeof
    sizeof演算子は変数のサイズを返します.例えば、sizeof(a)は4を返し、aは整数である.
    Condition ? X : Y
    条件演算子.コンディションが本当なら?値はX:そうでなければ値はYです.
    .(点)と->(矢印)
    カンマ演算子は一連の演算を順次実行します.カンマ式全体の値は、カンマで区切られたリストの最後の式の値です.
    &
    ポインタ演算子&は変数のアドレスを返します.例えば&a;変数の実際のアドレスが与えられます.
    *
    ポインタ演算子*は変数を指します.例えば、*var;変数varを指します.
    Cast
    強制変換演算子は、あるデータ型を別のデータ型に変換します.例えばint(2.2000)は2を返す
    演算優先度(この部分は極めて重要!!)
    次の表には、演算子の優先度が高い演算子と低い演算子がリストされ、高い優先度の演算子が表の上に表示され、低い優先度の演算子が表の下に表示されます.式では、優先度の高い演算子が優先的に計算されます.
    カテゴリ
    演算子
    けつごうせい
    接尾辞
    () [] -> .++ - -
    左から右へ
    1元
    + - ! ~++ - - (type)* & sizeof
    右から左へ
    乗算除算
    */%
    左から右へ
    プラスマイナス
    + -
    左から右へ
    シフト
    << >>
    左から右へ
    関係
    <<= >>=
    左から右へ
    等しい
    == !=
    左から右へ
    ビットとAND
    &
    左から右へ
    ビット異またはXOR
    ^
    左から右へ
    ビットまたはOR
    左から右へ
    ロジックとAND
    &&
    左から右へ
    論理またはOR
    左から右へ
    条件
    ?:
    右から左へ
    に値を付ける
    = += -= *=/= %=>>= <<= &= ^=
    右から左へ
    カンマ
    ,
    左から右へ
    例:
    #include 
    using namespace std;
     
    int main()
    {
       int a = 20;
       int b = 10;
       int c = 15;
       int d = 5;
       int e;
     
       e = (a + b) * c / d;      // ( 30 * 15 ) / 5
       cout << "(a + b) * c / d     " << e << endl ;
     
       e = ((a + b) * c) / d;    // (30 * 15 ) / 5
       cout << "((a + b) * c) / d     " << e << endl ;
     
       e = (a + b) * (c / d);   // (30) * (15/5)
       cout << "(a + b) * (c / d)     " << e << endl ;
     
       e = a + (b * c) / d;     //  20 + (150/5)
       cout << "a + (b * c) / d     " << e << endl ;
      
       return 0;
    }

    結果は次のとおりです.
    (a + b) * c / d     90
    ((a + b) * c) / d     90
    (a + b) * (c / d)     90
    a + (b * c) / d     50

    (主に菜鳥チュートリアルから来て、他のチュートリアルと自分の理解を溶け込んでいます)