C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の演算子の種類を徹底解説!算術・関係・論理・ビット演算子の使い方まとめ

C++には多くの種類の演算子(オペレーター)が用意されています。これらは大きく分けて、算術演算子関係演算子論理演算子ビット演算子代入演算子、そしてその他の演算子に分類できます。

この記事では、それぞれの演算子の役割と具体的な使用例をわかりやすく解説します。

算術演算子(Arithmetic Operators)

変数Aが10、変数Bが20という値を持っていると仮定します。

演算子説明
+加算:2つのオペランドを足し合わせます。
例:A + B → 30
-減算:第1オペランドから第2オペランドを引きます。
例:A - B → -10
*乗算:2つのオペランドを掛け合わせます。
例:A * B → 200
/除算:分子を分母で割ります。
例:B / A → 2
%剰余演算子:整数除算の余りを求めます。
例:B % A → 0
++インクリメント演算子:整数値を1つ増やします。
例:A++ → 11
--デクリメント演算子:整数値を1つ減らします。
例:A-- → 9

関係演算子(Relational Operators)

変数Aが10、変数Bが20という値を持っていると仮定します。

演算子説明
==等価演算子:2つのオペランドの値が等しいかどうかを判定します。等しければ条件は真(true)になります。
例:(A == B) は false
!=不等価演算子:2つのオペランドの値が等しくないかどうかを判定します。等しくなければ条件は真になります。
例:(A != B) は true
>より大きい:左オペランドの値が右オペランドの値より大きいかどうかを判定します。
例:(A > B) は false
<より小さい:左オペランドの値が右オペランドの値より小さいかどうかを判定します。
例:(A < B) は true
>=以上:左オペランドの値が右オペランドの値以上かどうかを判定します。
例:(A >= B) は false
<=以下:左オペランドの値が右オペランドの値以下かどうかを判定します。
例:(A <= B) は true

論理演算子(Logical Operators)

変数Aが1、変数Bが0という値を持っていると仮定します。

演算子説明
&&論理AND演算子:両方のオペランドがゼロ以外であれば、条件は真になります。
例:(A && B) は false
||論理OR演算子:どちらか一方でもオペランドがゼロ以外であれば、条件は真になります。
例:(A || B) は true
!論理NOT演算子:オペランドの論理状態を反転させます。条件が真であれば偽に、偽であれば真にします。
例:!(A && B) は true

ビット演算子(Bitwise Operators)

ビット演算子はビット単位で動作し、ビットごとの操作を実行します。「&」「|」「^」の真理値表は以下の通りです。

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とすると、2進数表記では以下のようになります。

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
演算子説明
&バイナリAND演算子:両方のオペランドに存在するビットを結果にコピーします。
例:(A & B) → 12(0000 1100)
|バイナリOR演算子:いずれかのオペランドに存在するビットを結果にコピーします。
例:(A | B) → 61(0011 1101)
^バイナリXOR演算子:片方のオペランドでのみセットされているビットをコピーします。
例:(A ^ B) → 49(0011 0001)
~1の補数演算子:単項演算子で、ビットを「反転」させる効果があります。
例:(~A) → -61(符号付き2進数のため、2の補数形式で1100 0011)
<<左シフト演算子:左オペランドの値を、右オペランドで指定されたビット数だけ左に移動します。
例:A << 2 → 240(1111 0000)
>>右シフト演算子:左オペランドの値を、右オペランドで指定されたビット数だけ右に移動します。
例:A >> 2 → 15(0000 1111)

代入演算子(Assignment Operators)

演算子説明
=単純代入演算子:右側のオペランドの値を左側のオペランドに代入します。
例: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(XOR)代入演算子:
例:C ^= 2 は C = C ^ 2 と同じ
|=ビット包含的OR(OR)代入演算子:
例:C |= 2 は C = C | 2 と同じ

その他の演算子(Misc Operators)

上記以外にも、C++には便利な演算子がいくつか用意されています。

番号演算子と説明
1sizeof演算子:変数のサイズ(バイト数)を返します。例えば sizeof(a) は、aがint型の場合4を返します。
2条件演算子(?:):条件が真であれば X の値を、そうでなければ Y の値を返します。三項演算子とも呼ばれます。
3カンマ演算子:一連の操作を順番に実行させます。カンマで区切られた式全体の値は、最後の式の値になります。
4.(ドット)と ->(アロー)メンバ演算子:クラス、構造体、共用体の個々のメンバを参照するために使用されます。
5() キャスト演算子:あるデータ型を別のデータ型に変換します。例えば int(2.2000) は 2 を返します。
6ポインタ演算子 &:変数のアドレスを返します。例えば &a; は変数 a の実際のメモリアドレスを取得します。
7ポインタ演算子 *:変数へのポインタを表します。例えば *var; は変数 var を指すポインタです。

まとめ

C++の演算子は、日常的な計算からビットレベルの操作まで幅広くカバーしています。特に代入演算子の省略形(+= など)はコードを簡潔にするのに役立ち、ビット演算子は組み込み開発やパフォーマンスが重要な場面で活躍します。それぞれの演算子の特性を理解して、適切に使い分けましょう。

  1. PythonのID演算子「is」「is not」とは?オブジェクトの同一性を比較する方法

    PythonにおけるオブジェクトのIDとは Pythonでは、すべてのオブジェクトがメモリ上に格納される際に、一意の識別番号(ID)が割り当てられます。このIDは、組み込み関数 id() を使うことで取得できます。 is 演算子の働き is 演算子は、2つのオブジェクトの id() を比較する演算子です。両者が同じIDを持っている場合(つまり、同じオブジェクトを参照している場合)には True を返し、そうでなければ False を返します。 is not 演算子の働き 一方、is not 演算子はその逆の動作をします。2つのオブジェクトの id() が同じ場合には False を、異なる

  2. Pythonの基本演算子一覧|7種類の演算子の使い方を徹底解説

    Pythonには、値や変数に対してさまざまな処理を行うための「演算子」が多数用意されています。演算子はその役割によって、算術演算子・比較(関係)演算子・論理演算子・ビット演算子・代入演算子・同一性演算子・メンバーシップ演算子の7種類に分類されます。この記事では、それぞれの種類ごとに使い方をわかりやすく解説します。 1. 算術演算子 数値の計算に使用する最も基本的な演算子です。 +:加算(足し算) -:減算(引き算) *:乗算(掛け算) /:除算(割り算)。結果は常に浮動小数点数になる //:切り捨て除算。小数点以下を切り捨てた結果を返す %:剰余(割り算の余り) a = 10 b = 3