四則演算についてはC言語でなくても、算数と同じなのでわかると思いますが、
プログラムでのビット演算や論理演算などは2進数の勉強をしていないとわかりにくいと思います。
今ここで完全に理解できなくても、「こういうものがあるのか。。」ぐらいでも大丈夫です。
実際の仕事や勉強で出てきたときに、集中して理解に努めれば良いと思います。
それでは、C言語の演算子と優先順位について解説していきます。
1.演算子の種類
演算子の種類としては、
・算術演算子
・インクリメント演算子
・比較演算子
・論理演算子
・ビット演算子
・代入演算子
・条項演算子
があります。
各々について説明していきます。
算術演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
+ | 加算 | a = b + c | bとcを足し算した値をaに入れる。 |
- | 減算 | a = b - c | bからcを引き算した値をaに入れる。 |
* | 乗算 | a = b * c | bとcを掛け算した値をaに入れる。 |
/ | 徐算 | a = b / c | bをcで割り算した値をaに入れる。 |
% | 余り | a = b % c | bをcで割り算した余りをaに入れる。 |
これらの演算子を使わないソフトウェアはおそらくありません。 それぐらい使います。
インクリメント演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
++ | インクリメント |
a = b++; a = ++b; |
bをaに入れた後に、bをインクリメントする。 bをインクリメントして、aに入れる。 |
-- | デクリメント |
a = b--; a = --b; |
bをaに入れた後に、bをデクリメントする。 bをデクリメントして、aに入れる。 |
演算子を変数の後ろにつけるか前につけるかで動きが変わります。
while文やfor文でのループの回数を数えるときに良く使用します。
比較演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
< > |
大小比較 (比較対象の値は含まない) |
a < 8 a > 8 |
aが7以下なら真、8以上なら偽。 aが9以上なら真、8以下なら偽。 |
<= >= |
大小比較 (比較対象の値は含む) |
a <= 8 a >= 8 |
aが8以下なら真、9以上なら偽。 aが8以上なら真、7以下なら偽。 |
== | 等値比較 |
a == 8 |
aが8なら真、8以外なら偽。 |
!= | 不等値比較 |
a != 8 |
aが8以外なら真、8なら偽。 |
これらの演算子もよく使用します。 簡単なので補足する説明はありません。
論理演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
&& | 論理積 | 5 <= a && a <= 10 | aが5以上かつ10以下なら真、それ以外は偽。 |
|| | 論理和 | b <= 5 || b >= 10 | bが5以下もしくは10以上なら真、それ以外は偽。 |
これらの演算子も、if文の条件式を記述するときによく使用します。
ビット演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
& | ビット毎の論理積(AND) | a = b & 0xf0 | bと0xf0とのANDの結果をaに入れる。 |
| | ビット毎の論理和(OR) | a = b | 0xf0 | bと0xf0とのORの結果をaに入れる。 |
^ | ビット毎の排他的論理和(XOR) | a = b ^ c |
bとcとのXORの結果をaに入れる。 |
~ | ビット毎の反転(NOT) | a = ~b | bのNOTの結果をaに入れる。 |
<< | 左シフト | a = b << 8 | bを左に8ビットシフトした値をaに入れる。 |
>> | 右シフト | a = b >> 8 | bを右に8ビットシフトした値をaに入れる。 |
他は、数値計算や数学系のプログラムなどでよく使われています。
代入演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
= | 右辺を左辺に代入。 | a = b | bの値をaに入れる。 |
+= | 右辺と左辺を足して左辺に入れる。 | a += b | bとaを足し算した結果をaに入れる。 |
ー= | 右辺と左辺を引いて左辺に入れる。 | a -= b | bとaを引き算した結果をaに入れる。 |
*= | 右辺と左辺を掛けて左辺に入れる。 | a *= b | bとaを掛け算した結果をaに入れる。 |
/= | 右辺を左辺で割って左辺に入れる。 | a /= b | bをaで割り算した結果をaに入れる。 |
%= | 右辺と左辺を割った余りを左辺に入れる。 | a %= b | bをaで割り算した余りをaに入れる。 |
&= | 右辺と左辺とのANDの結果を左辺に入れる。 | a &= 0xf0 | aと0xf0とのANDの結果をaに入れる。 |
|= | 右辺と左辺とのORの結果を左辺に入れる。 | a |= 0xf0 | aと0xf0とのORの結果をaに入れる。 |
^= | 右辺と左辺とのXORの結果を左辺に入れる。 | a ^= b | bとaとのXORの結果をaに入れる。 |
<<= | 左辺を左辺値分、左シフトして左辺に入れる。 | a <<= 8 | aを左に8ビットシフトした結果をaに入れる。 |
>>= | 左辺を左辺値分、右シフトして左辺に入れる。 | a >>= 8 | aを右に8ビットシフトした結果をaに入れる。 |
これらの代入演算子は、直感的にわかりにくい感じがしますので、
例えば、「a = a + b」のような感じで、 まとめずに記述できるものは、このような書き方が良いと思います。
条項演算子
演算子 | 説明 | 使用例 | 使用例説明 |
---|---|---|---|
?: | 加算 | a ? b : c | aが真ならb、aが偽ならc。 |
今までプログラムを数多く見てきましたが、条項演算子を使用したソースコードは、ほとんどありません。
この演算子はあまり使用せず、普通にif文で書く方が良いと思います。
2.演算子の優先順位
これまで説明した演算子には同時に使用された場合、どちらを先に計算するかという優先順位があります。
その優先順位の順番は下表のとおりです。
優先順位 | 演算子 |
---|---|
高 | () [] -> . |
↑ | ! ~ ++ -- (type) & |
| | * / % |
| | + - |
| | << >> |
| | < <= => > |
| | == != |
| | & |
| | ^ |
| | | |
| | && |
| | || |
| | ? : |
↓ | = += -= *= %= &= |= ^= <<= >>= |
低 | , |
3.最後に
演算子は、プログラムを組んだり読んだりしていると、 いつのまにか覚えます。
なので、プログラムをひたすら読み書きをして慣れていきましょう。
<関連・おすすめ記事>
私がviエディタを好きになった理由とその使い方 - 水瓶座列車
C言語の始め方と基本構造、コンパイルから実行までを解説 - 水瓶座列車
C言語の繰り返し構文( while, do while, for )の解説と応用 - 水瓶座列車
プログラミングを独学で勉強するためのLinuxパソコン準備手順 - 水瓶座列車