c operators types
例を使用したC ++の演算子の完全な調査:
これで 集中的なC ++トレーニングシリーズ、 以前のチュートリアルでは、変数、ストレージクラス、型修飾子など、C ++のさまざまな概念について学びました。また、これらの変数を変更する方法もわかりました。
これらの変更を行うには、これらの変数と定数に対して操作を実行し、演算子を使用してこれらの操作を実行する必要があります。
演算子は、オペランドと呼ばれる変数またはその他のエンティティに作用し、数学または論理演算を実行して値を変更し、それに応じて結果を生成する記号です。
学習内容:
C ++の演算子
演算子は、あらゆるプログラミング言語の基本的な基盤を形成します。演算子がないと、プログラミング言語のエンティティを変更または操作できないため、目的の結果を生成できません。 C ++には、このチュートリアルで詳しく説明する組み込み演算子が豊富に含まれています。
C ++では、ほとんどの演算子は二項演算子です。つまり、これらの演算子は、演算を実行するために2つのオペランドを必要とします。 ++(インクリメント)演算子のようないくつかの演算子は単項演算子です。つまり、1つのオペランドのみを操作します。
C ++には、3つのオペランドをとる条件演算子と呼ばれる3項演算子もあります。これについては、チュートリアルの後半で詳しく説明します。
C ++の演算子の種類
C ++の演算子は、次のように分類されます。
各タイプのC ++演算子について詳しく見ていきましょう。
算術演算子
算術演算子は、オペランドに対して基本的な数学演算を実行するために使用されます。
C ++は、次の算術演算をサポートしています。
オペレーター | バイナリ/単項 | 説明 |
---|---|---|
- | 単項 | デクリメント演算子–オペランドの値を1減らします |
+ | バイナリ | 2つのオペランドの追加 |
- | バイナリ | 2つのオペランドの減算 |
* | バイナリ | 2つのオペランドの乗算 |
/ | バイナリ | 2つのオペランドの除算 |
% | バイナリ | モジュラス演算子–結果は除算の剰余です |
++ | 単項 | インクリメント演算子–オペランドの値を1増やします |
次の例は、C ++の最初の5つの算術演算子を示しています。
#include #include using namespace std; int main() { int op1=3,op2=4; float op3=10.1,op4=5.4; cout<<'Operands are op1 = '< 次の例を使用すると、これをよりよく理解できます。 #include #include using namespace std; int main() { int x=4,y; y = ++x; cout<<'PreIncrement:Value of x = '<論理演算子 論理演算子は、条件/制約の組み合わせを評価して結果の値を取得するために使用されます。ブール式の評価の結果は、trueまたはfalseのいずれかであるブールです。
C ++は、次の論理演算子をサポートしています。
オペレーター 説明 7 L-> R <<
>> 左にビット単位でシフト
ビット単位で右にシフト && 論理積:両方の条件がtrueの場合はtrueを返し、それ以外の場合はfalseを返します。 || 論理OR:条件の1つが真の場合に真を返します。両方の条件がfalseの場合、falseを返します。 ! 論理NOT:条件を否定します。
C ++は、論理式を評価するために短絡法を採用しています。この場合、C ++は、論理式の最初の式/オペランドのみを評価して、結果を提供する必要があります。 例えば、 論理AND(&&)演算子の場合、C ++は最初の式のみを評価します。 falseの場合、2番目の条件がtrueであっても、結果はfalseになります。
同様に、論理OR(||)の場合、最初の式のみを評価します。最初の式がtrueの場合、結果はtrueになるため、2番目の式を評価する必要はありません。
以下に、論理演算子の使用法を示す例を示します。
#include #include using namespace std; int main() int a=10, b=8,c=12,d=14; if(!(a==0)) cout<<'a is not zero'< 出力:
aはゼロではありません
論理積は真です
論理ORは真です
上記のプログラムでは、式を評価して結果を出力するために、3つの論理演算子すべてを使用しました。
関係演算子
関係演算子または比較演算子は、2つのオペランドを比較するために使用されます。評価の結果は、真または偽のいずれかです。
C ++は、次の関係演算子をサポートしています。
オペレーター 説明 !エラー!予期しない演算子 '=' 2つのオペランドが等しいかどうかを評価します。等しい場合はtrueを返し、そうでない場合はfalseを返します。 !=(等しくない) 「等しい」演算子を補完します。オペランドが等しくない場合はtrueを返します。それ以外の場合はFalse。 <(less than) 最初のオペランドが2番目未満の場合はtrueを返します。それ以外の場合はFalse。 <=(less than equal to) 第1オペランドが第2オペランド以下の場合、trueを返します。それ以外の場合はFalse。 >(より大きい) 最初のオペランドが2番目より大きい場合はtrueを返します。それ以外の場合はFalse。 > =(以上) 最初のオペランドが2番目のオペランドと等しい場合にtrueを返します。それ以外の場合はFalse。
関係演算子を理解するには、以下のサンプルプログラムを参照してください。
#include #include using namespace std; int main() { int a=10, b=8,c=12,d=14; if(a==b) cout<<'a is equal to b'< 出力:
aはbと等しくありません
cがdと等しくない
(a + b)(c + d)未満/等しい
(a-b)(d-c)より大きい/等しい
上記のプログラムでは、関係演算子の使用法と、提供された式を評価する方法を確認できます。
条件ステートメントでは、値だけでなく変数や式も提供できることに注意してください。
ビット演算子
C ++のビット演算子は、提供されたオペランドのビットを操作します。ビット単位の演算子は、整数、文字などの整数型にのみ適用され、float、doubleなどのデータ型には適用されません。
以下は、C ++でサポートされているビット演算子です。
演算子 説明 &(バイナリAND) オペランド1とオペランド2のビットに対してAND演算を実行します。 |(バイナリOR) オペランド1とオペランド2のビットに対してOR演算を実行します。 ^(バイナリXOR) オペランド1とオペランド2のビットに対してXOR演算を実行します。 〜(バイナリの1の補数) 1つのオペランドを取り、そのビットを反転します。 <<( Binary left shift operator) 第1オペランドのビットを、第2オペランドで指定されたビット数だけ左にシフトします。 >>(バイナリ右シフト演算子) 第1オペランドのビットを、第2オペランドで指定された桁数だけ右にシフトします。
これらのビット演算子は、ビットごとにオペランドを操作します。 AND、OR、およびXOR演算の真理値表を以下に示します。
aとbを、AND、OR、およびXOR演算が実行される2ビットと見なします。
同じものの真理値表は以下のとおりです。
に b a&b a | b a ^ b 0 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0
ビット演算を理解するために例を見てみましょう。
a = 8およびb = 4とします。
aとbのバイナリ表現は次のとおりです。
a = 8 1000
a = 4 0100
a&b 0000 = 0
a | b 1100 = 12
a ^ b 1100 = 12
上記の例では、8と4のビットごとのANDが0であることがわかります。8と4のビットごとのORは12であり、8と4のビットごとのXORも12です。
これは、ビット演算子によってビット演算が実行される方法です。
ビット演算子を示す例。
#include #include using namespace std; int main() int a=8,b=4,c; c = a&b; cout<<'Result of & : '< 出力:
&の結果:0
|の結果:12
^の結果:12
の結果<< by 2 bits: 32
>>の結果2ビット:1
〜の結果:-4
上記のプログラムでは、ビット演算子の使用法を示し、各操作の出力も出力しました。
代入演算子
代入演算子「=」は、変数に値を代入するために使用されます。代入演算子のLHSは変数であり、RHSは変数に割り当てられる値です。右側の値は、左側の変数の値と同じタイプである必要があります。
「=」演算子と「==」演算子の違いに注意してください。前者は代入演算子で、後者は等式演算子です。
割り当て操作は右から左に行われます。代入演算子「=」とは別に、「複合代入演算子」として知られている代入演算子の他のバリエーションがあります。これらの演算子は、割り当てに加えて操作を実行します。
次の表に、これらの代入演算子の説明を示します。
オペレーター 説明 = RHSオペランドの値をLHSオペランドに割り当てます + = RHSオペランドをLHSオペランドに追加し、結果をLHSオペランドに割り当てます。 -= RHSオペランドをLHSオペランドに減算し、その結果をLHSオペランドに割り当てます。 * = RHSオペランドをLHSオペランドに乗算し、その結果をLHSオペランドに割り当てます。 / = RHSオペランドをLHSオペランドに分割し、結果をLHSオペランドに割り当てます。
上記の表に示すように、xとyがオペランドの場合、x + = yはx = x + yと同等です。
同様に、
x- = yはx = x-yと同等です。
x * = yはx = x * yと同等です。
x / = yはx = x / yと同等です。
以下のプログラミング例は、これらの代入演算子を示しています。
#include #include using namespace std; int main() { int x,y; cout<>y; x = y; cout<<'
Value of x = '< 出力:
入力変数yを入力してください:4
xの値= 4
a + = b:8
c- = b:3
a * = b:40
b / = c:1

上記の例では、代入演算子と複合代入演算子を示しました。
注意: %、などの他の二項演算子を組み合わせることもできます。<>、&、|、^などは、すでに示されているものに加えて、複合代入ステートメントに入れます。
その他の演算子
これまで、C ++のすべての主要な演算子について説明してきました。注意が必要な追加のC ++演算子がいくつかあります。
これらの演算子は次のとおりです。
(i)演算子のサイズ
sizeofは、CおよびC ++で広く使用されている単項演算子です。 Sizeofは、そのオペランドのサイズを返します。戻り値は通常、「size_t」で示される符号なし整数型です。
Sizeof演算子は、CおよびC ++言語で多くの用途があります。変数、配列、または式のサイズを調べたり、メモリのブロックを割り当てたりするためにも使用できます。
(ii)条件付き三項演算子
C ++の条件演算子は、if-elseステートメントの代わりに使用できます。
条件演算子の一般的な構文は次のとおりです。
状態? expression1:expression2;
条件が真の場合、式1が評価されます。条件がfalseの場合、expression2が評価されます。
潜在的なエラーを回避するために、expression1とexpression2は同じデータ型である必要があることに注意してください。
推奨読書=> C#の三項演算子
(iii)コンマ演算子
トークン「、」として表されるコンマ演算子は、演算子としても区切り文字としても使用できます。
評価する式が複数ある場合は、演算子としてコンマを使用します。右端の式のみがLHSに割り当てられます。
例えば、次の式を考えてみましょう。
x =(y = 4、y + 1);
この式では、右側にコンマで区切られた2つの式があります。ここで、コンマは演算子として機能します。最初に、式y = 4が評価されます。次に、次の式y + 1は、最初の式の結果、つまりy = 4を使用して評価されます。したがって、y + 1の値は5になり、この値はxに割り当てられます。
区切り文字として、コンマをどこでも使用して、定義やパラメーターリストなどを区切ることができます。
(iv)メンバーアクセスオペレーター
C ++のクラス、構造体、または共用体の個々のメンバーにアクセスするために使用される2つの演算子があります。ドット演算子(。)と矢印(->)演算子です。 C ++でオブジェクト指向プログラミングを学ぶときに、これらの演算子について詳しく学びます。
以下の例は、sizeof、コンマ、および条件演算子の使用法を示しています。
#include #include using namespace std; int main() { int x,y; x = (y=3,y+4); cout<<'Value of x = '< 出力:
Javaでdoubleは何をしますか
xの値= 7
変数xが5より大きい
sizeof(x):4 sizeof(y):4
同じもののスクリーンショットを以下に示します。

上記のプログラムに示されているように、最初に2つの変数が宣言され、コンマで区切られています。 (セパレーターとしてのコンマ)。次に、2つの式を持つコンマ演算子があります。出力からわかるように、右端の式の値は変数xに割り当てられます。次に、xが5未満であるかどうかを評価するための条件演算子を示します。
最後に、sizeof演算子の使用法を示します。ここでは、sizeof演算子を使用して、変数xとyのサイズを取得します。どちらも整数変数であるため、返されるサイズは4バイトです。
(v)演算子の優先順位と結合性
すでにほぼすべてのC ++演算子を見てきましたが、それらを式で使用して特定の操作を実行できることはわかっています。しかし、例で見た表現は単純で単純です。ただし、要件によっては、式がますます複雑になる傾向があります。
このような複雑な式には、複数の演算子と多くのオペランドがあります。このような状況では、どの演算子を最初に評価するかを評価する必要があります。
例えば、次の式を検討してください。
x = 4 + 5/3;
ここには+演算子と/演算子があり、最初に評価する式を決定する必要があります。数学的には、除算は加算の前に実行されることがわかっています。したがって、式はx = 4 +(5/3)= 5になります。
しかし、コンパイラがこのような状況に直面した場合、式を適切に評価できるように、操作の順序を決定するための同様のメカニズムも必要です。
複合式の演算子が評価されるこの順序は、演算子の「優先順位」と呼ばれます。 C ++はすべての演算子の優先順位を定義しており、優先順位の高い演算子が最初に評価されます。
同じ優先順位の式に2つの演算子を並べるとどうなりますか?ここで、演算子の結合性が重要になります。
結合性は、式を左から右の順序で評価するか、右から左の順序で評価するかをコンパイラーに指示します。したがって、演算子の優先順位と結合性を使用して、式を効果的に評価し、目的の結果を得ることができます。
C ++は、使用するさまざまな演算子の優先順位と結合性で構成されるテーブルを提供します。
この表を以下に示します。
優先順位/結合性 オペレーター 説明 1なし :::
::: スコープ解決演算子
(単項)
(バイナリ) 2 L-> R ()
()
()
{}
タイプ()
タイプ{}
()
。
->
++
-
typeid
const_cast
dynamic_cast
reinterpret_cast
static_cast 括弧
関数呼び出し
初期化
均一な初期化(C ++ 11)
機能的なキャスト
機能キャスト(C ++ 11)
配列の添え字
オブジェクトからのメンバーアクセス
オブジェクトptrからのメンバーアクセス
ポストインクリメント
ポストデクリメント
実行時型情報
constを捨てる
実行時のタイプチェックキャスト
あるタイプを別のタイプにキャストするコンパイル時のタイプチェックキャスト 3 R-> L +
-
++
-
!
〜
(タイプ)
のサイズ
&
*
新着
新着()
削除
delete () 単項もっと
単項マイナス
プレインクリメント
事前デクリメント
論理否定
ビット単位ではありません
Cスタイルのキャスト
バイト単位のサイズ
の住所
間接参照
動的メモリ割り当て
動的配列割り当て
動的メモリ削除
動的配列の削除 4 L-> R -> *
。* メンバーポインタセレクタ
メンバーオブジェクトセレクター 5 L-> R *
/
% 乗算
分割
係数 6 L-> R +
- 添加
減算 8 L-> R <
<=
>>
> = 比較未満
以下の比較
より大きい比較
以上の比較 9 L-> R !エラー!違法文字 '!' 平等
不平等 10 L-> R & ビットごとのAND 11 L-> R ^ ビット単位のXOR 12 L-> R | ビットごとのOR 13 L-> R && 論理積 14 L-> R || 論理OR 15 R-> L ?:
=
* =
/ =
%=
+ =
-=
<<=
>> =
&=
| =
^ = 条件付き(下記の注を参照)
割り当て
乗算の割り当て
部門の割り当て
モジュラスの割り当て
追加の割り当て
減算の割り当て
ビット単位の左シフト割り当て
ビット単位の右シフト割り当て
ビットごとのAND代入
ビットごとのOR代入
ビット単位のXOR割り当て 16 R-> L スロー 式を投げる 17 L-> R 、 コンマ演算子
ノート:
- 優先順位レベル1が最高の優先順位レベルであり、レベル17が最低です。優先順位が高い演算子が最初に評価されます。
- L-> Rは、左から右への結合性を意味します。
- R-> Lは、右から左への結合性を意味します。
結論
これはすべてC ++の演算子に関するものです。
ほぼすべての演算子について説明しました。上記の優先順位の表にある、まだ説明していない特定の演算子については、今後のチュートリアルで取り上げるトピックに従って説明します。
=> 完全なC ++チュートリアルリストを調べるには、ここを参照してください
推奨読書