水瓶座列車

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

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パソコン準備手順 - 水瓶座列車