C++演算子完全ガイド:種類、使い方、ベストプラクティス
演算子とは、コンパイラに特定の数学的または論理的操作を実行するよう指示する記号です。C++には豊富な組み込み演算子があり、以下の種類を提供します:
- 算術演算子
- 関係演算子
- 論理演算子
- ビット演算子
- 代入演算子
- その他の演算子
この章では、これらの演算子を1つずつ調べます。
算術演算子
C++言語でサポートされている算術演算子は以下の通りです:
変数Aが10、変数Bが20を保持していると仮定すると:
例を見る
| 演算子 | 説明 | 例 |
|---|---|---|
| + | 2つのオペランドを加算 | A + B は 30 を与える |
| - | 第1オペランドから第2オペランドを減算 | A - B は -10 を与える |
| * | 両オペランドを乗算 | A * B は 200 を与える |
| / | 分子を分母で除算 | B / A は 2 を与える |
| % | 剰余演算子、整数除算後の余り | B % A は 0 を与える |
| ++ | インクリメント演算子、整数値を1増やす | A++ は 11 を与える |
| -- | デクリメント演算子、整数値を1減らす | A-- は 9 を与える |
関係演算子
C++言語でサポートされている関係演算子は以下の通りです:
変数Aが10、変数Bが20を保持していると仮定すると:
例を見る
| 演算子 | 説明 | 例 |
|---|---|---|
| == | 2つのオペランドの値が等しいかチェック、等しければ真 | (A == B) は真でない |
| != | 2つのオペランドの値が等しくないかチェック、等しくなければ真 | (A != B) は真 |
| > | 左オペランドが右オペランドより大きいかチェック、大きければ真 | (A > B) は真でない |
| < | 左オペランドが右オペランドより小さいかチェック、小さければ真 | (A < B) は真 |
| >= | 左オペランドが右オペランド以上かチェック、以上なら真 | (A >= B) は真でない |
| <= | 左オペランドが右オペランド以下かチェック、以下なら真 | (A <= B) は真 |
論理演算子
C++言語でサポートされている論理演算子は以下の通りです:
変数Aが1、変数Bが0を保持していると仮定すると:
例を見る
| 演算子 | 説明 | 例 |
|---|---|---|
| && | 論理AND演算子。両オペランドが非ゼロなら真 | (A && B) は偽 |
| || | 論理OR演算子。いずれかのオペランドが非ゼロなら真 | (A || B) は真 |
| ! | 論理NOT演算子。オペランドの論理状態を反転 | !(A && B) は真 |
ビット演算子
ビット演算子はビット単位で動作し、ビットごとの演算を行います。&、|、^ の真理値表:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
A = 60、B = 13 とすると、バイナリ形式では:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
C++でサポートされているビット演算子:
変数Aが60、変数Bが13を保持していると仮定すると:
例を見る
| 演算子 | 説明 | 例 |
|---|---|---|
| & | ビットAND演算子。両オペランドに存在するビットを結果にコピー | (A & B) は 12 (0000 1100) |
| | | ビットOR演算子。いずれかのオペランドに存在するビットをコピー | (A | B) は 61 (0011 1101) |
| ^ | ビットXOR演算子。一方のオペランドのみにセットされているビットをコピー | (A ^ B) は 49 (0011 0001) |
| ~ | ビット単位の1の補数演算子。単項で、ビットを「反転」させる効果 | (~A) は -61 (2の補数形式で 1100 0011) |
| << | ビット左シフト演算子。左オペランドの値を、右オペランドで指定されたビット数だけ左に移動 | A << 2 は 240 (1111 0000) |
| >> | ビット右シフト演算子。左オペランドの値を、右オペランドで指定されたビット数だけ右に移動 | A >> 2 は 15 (0000 1111) |
代入演算子
C++言語でサポートされている代入演算子:
例を見る
| 演算子 | 説明 | 例 |
|---|---|---|
| = | 単純代入演算子。右オペランドの値を左オペランドに代入 | C = A + B は A + B の値を C に代入 |
| += | 加算代入演算子。右オペランドを左オペランドに加え、結果を左オペランドに代入 | C += A は C = C + A と等価 |
| -= | 減算代入演算子。右オペランドを左オペランドから引き、結果を左オペランドに代入 | C -= A は C = C - A と等価 |
| *= | 乗算代入演算子。右オペランドを左オペランドに掛け、結果を左オペランドに代入 | C *= A は C = C * A と等価 |
| /= | 除算代入演算子。左オペランドを右オペランドで割り、結果を左オペランドに代入 | C /= A は C = C / A と等価 |
| %= | 剰余代入演算子。2つのオペランドで剰余を取り、結果を左オペランドに代入 | C %= A は C = C % A と等価 |
| <<= | 左シフト代入演算子 | C <<= 2 は C = C << 2 と同じ |
| >>= | 右シフト代入演算子 | C >>= 2 は C = C >> 2 と同じ |
| &= | ビットAND代入演算子 | C &= 2 は C = C & 2 と同じ |
| ^= | ビット排他的OR代入演算子 | C ^= 2 は C = C ^ 2 と同じ |
| |= | ビット包含的OR代入演算子 | C |= 2 は C = C | 2 と同じ |
その他の演算子
C++がサポートするその他の演算子:
| No. | 演算子と説明 |
|---|---|
| 1 | sizeof sizeof演算子は変数のサイズを返す。例:sizeof(a) で a が整数なら 4 を返す |
| 2 | 条件 ? X : Y 条件演算子(?)。条件が真なら X の値を、偽なら Y の値を返す |
| 3 | , カンマ演算子。一連の操作を実行させる。カンマ式全体の値は、カンマ区切りリストの最後の式の値 |
| 4 | . (ドット) と -> (アロー) メンバ演算子。クラス、構造体、共用体の個々のメンバを参照するために使用 |
| 5 | キャスト キャスト演算子は1つのデータ型を別の型に変換。例:int(2.2000) は 2 を返す |
| 6 | & ポインタ演算子 & は変数のアドレスを返す。例:&a で変数の実際のアドレスが得られる |
| 7 | * ポインタ演算子 * は変数へのポインタ。例:*var で変数 var へのポインタ |
C++における演算子の優先順位
演算子の優先順位は、式における項のグループ化を決定し、式の評価方法に影響します。特定の演算子は他より高い優先順位を持ちます。例えば、乗算演算子は加算演算子より高い優先順位を持ちます。
例:x = 7 + 3 * 2; ここでは x には 20 ではなく 13 が代入されます。演算子 * が + より高い優先順位を持つため、まず 3*2 が乗算され、その後 7 に加算されるからです。
ここでは、最も高い優先順位の演算子が表の上部に、最も低い優先順位の演算子が下部にあります。式の中で、優先順位の高い演算子が最初に評価されます。
例を見る
| カテゴリ | 演算子 | 結合規則 |
|---|---|---|
| 後置 | () [] -> . ++ -- | 左から右 |
| 単項 | + - ! ~ ++ -- (type)* & sizeof | 右から左 |
| 乗算 | * / % | 左から右 |
| 加算 | + - | 左から右 |
| シフト | << >> | 左から右 |
| 関係 | < <= > >= | 左から右 |
| 等価 | == != | 左から右 |
| ビットAND | & | 左から右 |
| ビットXOR | ^ | 左から右 |
| ビットOR | | | 左から右 |
| 論理AND | && | 左から右 |
| 論理OR | || | 左から右 |
| 条件 | ?: | 右から左 |
| 代入 | = += -= *= /= %= >>= <<= &= ^= |= | 右から左 |
| カンマ | , | 左から右 |
C言語
- C#演算子完全ガイド:C#における演算子の包括的解説
- C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
- C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
- C言語演算子完全ガイド:算術・関係・論理・ビット演算子
- C++演算子を徹底解説:種類、例、サンプルプログラム付き
- C言語演算子完全ガイド:種類、機能、実例付き解説
- C++プログラミング言語:概要と主要機能
- Python 演算子完全マスター: 包括的ガイド
- Java演算子をマスター:種類、構文、実践例