水瓶座列車

どこまで行けるか、とりあえず発車します。

C言語の演算子と優先順位の解説

f:id:aquarius999:20190407000620p:plain

 

四則演算については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言語のデータ型と変数、関数について解説 - 水瓶座列車

C言語の繰り返し構文( while, do while, for )の解説と応用 - 水瓶座列車

プログラミングを独学で勉強するためのLinuxパソコン準備手順 - 水瓶座列車