Index

HOME > プログラムTOP > C++




C++の基礎知識(5)

【演算子篇】

| ●基本的な演算子 | ●特殊な演算子 | ●演算子の優先順位 |
( 記述篇, データ型篇, 定数篇, 変数篇, 関数篇, 制御文篇, ポインタ篇, 構造体篇, クラス篇, 番外篇 )

sasaraan programming

Exposition

●基本的な演算子

演算子機能説明
算術演算子
+加算a + b ... aとbを足す
-減算a - b ... aからbを引く
*乗算a * b ... aにbを掛ける
/除算a / b ... aをbで割る
%剰余a % b ... aをbで割った余り
関係演算子
==等しいa == b ... aとbが等しい
!=等しくないa != b ... aとbが等しくない
<未満a < b ... aがbより小さい
>超えるa > b ... aがbより大きい
<=以下a <= b ... aがbに等しいかbより小さい
>=以上a >= b ... aがbに等しいかbより大きい
インクリメント, デクリメント
++1を加算 a++ ... aの値を返してからaに1加算
++a ... aに1加算してからaの値を返す
--1を減算 a-- ... aの値を返してからaを1減算
--a ... aを1減算してからaの値を返す
論理演算子
!否定!a ... aが真なら偽、aが偽なら真
&&論理積
(かつ)
a && b ... aとbがともに真なら真、aとbのどちらかが偽なら偽
      (ただし、aが偽ならbを評価せずに偽を返す)
||論理和
(または)
a || b ... aとbのどちらかが真なら真、aとbがともに偽なら偽
      (ただし、aが真ならbを評価せずに真を返す)
ビット演算子
&ANDa & b ... aとbがともに1なら1、それ以外なら0
|ORa | b ... aとbのどちらかが1なら1、それ以外なら0
^XORa ^ b ... aとbの値が異なれば1、同じなら0
~反転~a ... aが0なら1、aが1なら0
<<左シフトa<<b ... bのビット数だけ左にスライド(右側には0を補充)
>>右シフトa>>b ... bのビット数だけ右にスライド(左側には0を補充)
代入演算子
=単純代入a = b ... aにbを代入, a = b = 1 ... aとbに1を代入
+=加算代入a += b ... a = a + b に同じ
-=減算代入a -= b ... a = a - b に同じ
*=乗算代入a *= b ... a = a * b に同じ
/=除算代入a /= b ... a = a / b に同じ
%=剰余代入a %= b ... a = a % b に同じ
&=AND代入a &= b ... a = a & b に同じ
^=OR代入a ^= b ... a = a ^ b に同じ
|=XOR代入a |= b ... a = a | b に同じ
<<=左シフト代入a <<= b ... a = a << b に同じ
>>=右シフト代入a >>= b ... a = a >> b に同じ
条件演算子
? :条件分岐a? b: c; ... aが真ならb, aが偽ならc
ポインタ演算子
*アドレス内容*a ... aが示すアドレスにある値
&アドレス値&a ... aのアドレス

●特殊な演算子

カンマ演算子】  複数行にわたるプログラム行を一行で表現します。
 a = 1;
 b = 2;
 → a = 1, b = 2;
sizeof】  sizeof 式, sizeof(式), sizeof(データ型) ... 式をバイト数で表現します。
 int value = sizeof num;
 int value = sizeof(int);
型変換(キャスト)】  (データ型) 式 ... 式の値を指定したデータ型に変換
 例えば、、整数同士の計算では整数値を返しますので、答えに小数が欲しいときは型変換しなければ正しい計算結果を得ることはできません。
  → int a = 25; int = 10; の時、 a/b = 2、(double)a/b = 2.5
  → double a = 15.5; doubleb = 2.5; の時、 a/b = 6.2、(int)a/b = 6
  → unsigned value = (unsigned) number;
 static_cast<データ型>(式)   ... 静的変換(上記に同じ)
 dynamic_cast<データ型>(式)  ... 動的変換(型変換の有効性を検証)
 const_cast<データ型>(式)   ... 定数変換(const/volatile属性を除去)
 reinterpret_cast<データ型>(式) ... 再解釈変換(単純に型を置換え)
  → int value = static_cast<int>(chr);
メンバ参照用演算子】  構造体や共用体、またはクラスのメンバにアクセスします。
 struct book {
   int id;
 }
 book bk;   bk.id = 1;   // 実体のメンバには . を使用
 book *pbk; pbk->id = 1; // ポインタのメンバには -> を使用
newとdelete】  new : 動的にオブジェクトを作成 / delete : newで作成したオブジェクトを解放
 newで作成したオブジェクトは deleteで解放する必要があります。
 (通常の場合) int *value = new int;   delete value; // ポインタ宣言してnew
 (配列の場合) char *s = new char[16]; : delete [] s;  // []をつける
スコープ解決演算子】  グローバル変数などを優先して適用させます。
 int value = 1;     // グローバル変数
 void func() {
   int value = 0;   // ローカル変数
   int a = ::value;  // グローバル変数の value = 1 を適用
   int b = value;   // ローカル変数の value = 0 を適用
 }

●演算子の優先順位

 式に複数の演算子が含まれる場合は、演算子の優先度が高いものから順に計算していきます。優先度が低いものを先に計算したい場合は括弧でくくるなどして対処する必要があります。下表は優先度別の演算子を表したものです。上に行くほど優先度が高く、下へ行くほど優先度は低くなります。
演算子種類
1.() . -> []かっこ、メンバ参照、配列のかっこ
2.! ++  -- * & ~ sizeof否定、イン(デ)クリメント、ポインタ、反転、sizeof
3.* / %乗算、除算、剰余
4.+ -加算、減算
5.<< >>ビットシフト
6.< > <= >=比較
7.== !=等しい、等しくない
8.&ビットAND
9.^ビットXOR
10.|ビットOR
11.&&論理積(かつ)
12.||論理和(または)
13.?:条件分岐
14.= += -= *= /= %= &= ^= |= <<= >>=代入
15.,カンマ

www.sasaraan.net

(c) morijoh