1-09. 演算子

公開日: 16:51 1. 基本編/1-09. 演算子


operator オペレータ、演算子。+、*など。
operand オペランド、被演算子。1、C++における変数など。

オペレータ(演算子)はある数学的または論理的な操作を実行するようコンパイラに支持する記号で す。C++は豊富に演算子が組み込まれており、次のようなものがあります
  • 算術演算子
  • 比較演算子
  • 論理演算子
  • ビット演算子
  • 代入演算子
  • その他の演算子

このページでは算術、比較、論理、ビット操作、代入などの演算子を見ていきま す。

算術演算子

C++では次の算術演算子がサポートされています。 変数Aが10、変数Bが20であると仮定します。
演算子説明使用例
+2つの被演算子を加算A + Bは30
-1つめの被演算子から2つめの非演算子を減算A - Bは-10
*2つの被演算子を乗算A * Bは200
/2つの被演算子を除算B / Aは2
%余剰演算子、割ったあまりB % Aは0
++インクリメント(増加)演算子、整数を1増やすA++ は11
--デクリメント(減少)演算子、整数を1減らすA-- 9

比較演算子

C++でが次の比較演算子がサポートされています。 先ほどと同様に、変数Aが10、変数Bが20であると仮定します。
演算子説明使用例
==2つの被演算子の値が等しいか調べ、等しければtrueを返す (A == B) はtrueとならない
!=2つの被演算子の値が等しいか調べ、等しくなければtrueを返す(A != B) はtrue
>左の被演算子が右より大きいか調べ、大きければtrueを返すA > Bはtrueでない
<左の被演算子が右より小さいか調べ、小さければtrueを返すA < B はtrue
>=左の被演算子が右以上か調べ、以上ならtrueを返すA >= B はtrueでない
<=左の被演算子が右以下か調べ、以下ならtrueを返すA <= B はtrue

論理演算子

C++では次の論理演算子がサポートされています。 変数Aが1、変数Bが0であると仮定します。
演算子説明使用例
&&論理和(AND)演算子。両方の被演算子が0でなければtrue(A && B) はfalse
||論理積(OR)演算子。2つの被演算子のうちどちらか1つが0でなければtrue(A || B) はtrue
!論理否定(NOT)演算子。論理状態を反転するのに使われる。条件がtrueならNOT演算子はfalseにする!(A && B) はtrue

ビット演算子

ビット演算子はビット上で動作し、ビットごとの操作を実行します。&、|、~の真理値 表は次のようになります。
pqp & qp | qp ^ q
00000
01011
11110
10011

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

C++でサポートされているビット演算子は次の表になります。 A = 60;B = 13;と仮定します。
演算子説明使用例
&ビット単位AND演算子は各ビットで入力する2つのビットがどちらも1であれば出力は1となる(A & B) は0000 1100で12となる
|ビット単位OR演算子は各ビットで入力する2つのビットがどちらかが1であれば出力は1となる(A | B) は0011 1101で61となる
^ビット単位XOR演算子は各ビットで入力する2つのビットが異なれば出力は1となる(A ^ B) は0011 0001で4961となる
~ビット単位NOT演算子はビットを反転させる(~A) は2の補正により1100 0011となり符号付き整数で61となる
<<ビット単位左シフト演算子は左にある被演算子の値を右の被演算子で指定したビット数分左へ移動するA << 2 は1111 0000で240となる
>>ビット単位右シフト演算子は左にある被演算子の値を右の被演算子で指定したビット数分右へ移動するA >> 2 は0000 1111で15となる

代入演算子

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 <<= A はC = ( C << 2 )と等価
>>=右シフト代入演算子C >>= A はC = ( C >> 2 )と等価
&=ビット積代入演算子C &= A はC = C & 2 と等価
^=ビットXOR代入演算子C ^= A はC = C ^ 2 と等価
|=ビット和代入演算子C |= A はC = C | 2 と等価

他の演算子

これまで見てきた演算子以外にも、次のようなものがあります。
演算子説明
sizeofsizeof演算子は値のサイズを返す。整数aをsizeof(a)としたとき、4が返ってくる
条件式 ? X : Y三項演算子。条件式が真ならX、偽ならYを返す。整数aをsizeof(a)としたとき、4が返ってくる
.(ドット)と->(アロー)メンバ演算子でクラスや構造体、ユニオンの内部を参照するのに使われる
キャストキャスト演算子はあるデータ型を別のものへ変換する。例えば、int(2.2000)は2を返す
&ポインタ演算子&は変数のアドレスを返す。例えば、&a;は変数の実アドレスを返す
*間接演算子*は変数を指す(ポインタ)。例えば、*var;は変数varを示すポインタ

C++における演算子の優先順位

演算子の優先順位は式の中の表現のまとまりを決定します。これは式がどのように評価されるかに影響します。特定の演算子は他のものより高い優先度を持ち、例えば、乗算演算子は加算演算子より高い優先度を持ちます。

例えば、 x = 7 + 3 * 2;
*は+より優先度が高いので、xには20ではなく13が割り当てられます。つまり、最初に3*2が計算され、その後に7に加算します。

次の表では、表の先頭の演算子は高い優先度を持ち、下がるに連れて優先度が低くなります。式の中で、高い優先度を持つ演算子は先に評価されます。
分類演算子結合性
接尾辞() [] ->> . ++ --左から右
単項+ - ! ~ ++ -- (型)* & sizeof右から左
乗法* / % 左から右
加法+ - 左から右
ビットAND&左から右
ビットXOR^左から右
ビットOR|左から右
論理AND&&左から右
論理OR||左から右
条件式?:右から左
代入= += -= *= /= %= >>= << &= ^= |=右から左
カンマ,左から右
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿