演算子(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;
    式中の++iをiに置き換えた式
     例: 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型で、真のとき 1、偽のとき 0
 >= 以上≧
 < より小さい<
 <= 以下≦
 == ※ 等しい=
 != 等しくない≠
※ 代入演算子 = と間違わないように!
(演算子を構成している記号の間に空白(スペース)を入れてはいけない!例: > = はNG!)

 論理演算子

演算子機能備考
 &&論理積(AND) 式1 && 式2 式1の値が0(偽)のとき
 式2を実行せずに、0(偽)
式1の値が0でない(真)のとき
 式2を実行して、
  その値が0(偽)ならば 0、
  0でない(真)ならば 1
結果はint型で、
真のとき 1、
偽のとき 0
 ||論理和(OR) 式1 || 式2 式1の値が0でない(真)のとき
 式2を実行せずに、1(真)
式1の値が0(偽)のとき
 式2を実行して、
  その値が0(偽)ならば 0、
  0でない(真)ならば 1
 !論理否定(NOT) !式1 式1が0でない(真)のとき 0
式1が0(偽)のとき 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 はダメ

脚注