演算子(operator)

演算子

 2項算術演算子

演算子機能備考
 +加算足し算 a + ba がポインタの時は特別
 -減算引き算 a - b
 *乗算掛け算 a * b 
 /除算割り算 a / b 整数型同士で被演算数が負の場合の
切り捨て方向は処理系依存
a == (a/b)*b + a%b
は保証される
 %剰余割り算
の余り
a % b 整数型同士で被演算数が負の場合の
結果の符合は処理系依存

 ポインタの加減算

演算のパターン結果の値と
ポインタ型 + 整数型その数だけ後ろ要素を指すポインタ
ポインタ型 - 整数型その数だけ前の要素を指すポインタ
ポインタ型 - ポインタ型ポインタに挟まれた要素数を表す整数
その他の演算と型に関してはこっち

 単項算術演算子

演算子機能備考
 +プラス +a
 -マイナス -a

 ビット毎の論理演算子

演算子機能備考
 &ビット毎の
論理積
a & b ビットマスクに使われる
 |ビット毎の
論理和
a | b ビットオンに使われる
 ^ビット毎の
排他的論理和
a ^ b ビット反転に使われる
 <<左シフト a << b aをbビット左シフト(右から0が入る)
2bを掛けるのと同じ
 >>右シフト a >> b aをbビット右シフト
符号無し数の場合:
 論理シフトで、2bで割るのと同じ
符号付き数の場合:
 論理シフト/算術シフトは処理系依存
 ~1の補数 ~a aの各ビットの0/1を反転する
<<>>の間に 空白(スペース)を入れてはいけない!)

各ビット演算の結果
被演算ビット論理積(AND)論理和(OR)排他的論理和(XOR)論理否定(NOT)
aba & ba | ba ^ b~a
000001
01011
100110
11110

1ビットシフトの結果
符号ビット(s)
が保存される →

 代入演算子

1 = 2
1 op= 2

 インクリメント・デクリメント演算子

演算子 前置(++a, --a 後置(a++, a--
 ++ aの値を使用する前に、
インクリメント(1増やす)
aの値を使用した後に、
インクリメント(1増やす)
 -- aの値を使用する前に、
デクリメント(1減らす)
aの値を使用した後に、
デクリメント(1減らす)
++--の間に 空白(スペース)を入れてはいけない!)
  • 式の中に++--が含まれている場合の考え方
    ++iを1個含む式 ++i;
    式中の++iiに置き換えた式
     例: j = ++i;
    ++i;
    j = i;
    i++を1個含む式 式中のi++iに置き換えた式
    i++;
     例: j = i++;
    j = i;
    i++;
  • 変数(k)の値を1増やす方法
    1. k = k + 1;
    2. k += 1;
    3. ++k;
    4. k++;
  • ポインタ型の場合は、前(--)後(++)の要素を指すようになる
   

 関係演算子

演算子機能数学備考
 > より大きい 算術演算子よりも優先順位が低く
論理演算子よりも優先順位が高い

結果はint型で、のとき のとき
 >= 以上
 < より小さい
 <= 以下
 == 等しい
 != 等しくない
代入演算子 = と間違わないように!
(演算子を構成している記号の間に空白(スペース)を入れてはいけない!例: > = はNG!)

 論理演算子

演算子機能備考
 &&論理積(AND) 1 && 2 1の値が)のとき
 2を実行せずに、
1の値が0でない)のとき
 2を実行して、
  その値が)ならば
  0でない)ならば
結果はint型で、
のとき
のとき
 ||論理和(OR) 1 || 2 1の値が0でない)のとき
 2を実行せずに、
1の値が)のとき
 2を実行して、
  その値が)ならば
  0でない)ならば
 !論理否定(NOT) !1 10でない)のとき
1)のとき
(演算子を構成している記号の間に空白(スペース)を入れてはいけない!例: & & はNG!)

結果の論理値
被演算式論理積(AND)論理和(OR)論理否定(NOT)
1 2 1 && 2 1 || 2 !1

 条件式

( 条件 ) ? T : F

 sizeof

sizeof オブジェクト
sizeof( 型名 )

 コンマ

1 , 2

 キャスト(cast)

(型名)

演算子の優先順位と結合規則

優先
順位
演算子結合
規則
備考
















() [] -> . 関数配列構造体
! ~ ++ -- + - * & () sizeof 単項
* / % 2項(乗、除、剰余)
+ - 2項(加、減)
<< >> ビットシフト(左、右)
< <= > >=  比較
== != 比較
& ビット毎の論理積
^ ビット毎の排他的論理和
| ビット毎の論理和
&& 論理積
|| 論理和
? : 条件式(3項)
= += -= *= /= %=  &= ^= |= <<= >>= 代入
, コンマ

 優先順位

優先順位が高い演算子から順に演算が実行される。

 結合規則

同じ優先順位の演算子が並んだ時、

数学との違いについて

数学意味Cの式備考
x = 1x に 1 を代入するx = 1代入演算子、 == と間違わないこと
a = ba と b が等しいa == b関係(比較)演算子、 = = ではダメ、= と間違わないこと
a ≠ ba と b が等しくないa != b関係(比較)演算子、 ! =<> ではダメ、論理否定を使って !(a==b) でも良い
a ≧ ba は b 以上a >= b関係(比較)演算子、 > = ではダメ
a ≦ ba は b 以下a <= b関係(比較)演算子、 < = ではダメ
a = b = 0a 、b に 0 を代入するa = b = 0代入演算子、 場所によっては a = 0; b = 0;a = 0, b = 0 でも良い
a = b = 0a も b も 0 に等しいa == 0 && b == 0関係(比較)演算子と論理演算子、 a == b == 0 はダメ
1 < x < 3x は 1 より大きく、3 より小さい1 < x && x < 3関係(比較)演算子と論理演算子、 1 < x < 3 はダメ
x ≦ 1,3 ≦ xx は 1 以下または 3 以上x <= 1 || 3 <= x関係(比較)演算子と論理演算子、 x <= 1, 3 <= x はダメ
a = 2,b = 4a は 2、b は 4 に等しいa == 2 && b == 4関係(比較)演算子と論理演算子、 a == 2, b == 4 はダメ

脚注