<C言語>式と演算子
今回の記事でわかること
- 式の扱い方が分かる
- 演算子の種類が分かる
式とは
プログラミングでいう「式」とは、値や変数、演算子を組み合わせて「計算できるもの」のことを指します
算数で「1+2」と書いたら「3」になるのと同じで、プログラミングでも「式」を書けば結果が出てきます
int num = 1 + 2;
print("%d", num);
/*出力結果
3
*/
この場合、1 + 2 が式であり、その結果 3 が num に代入されます
変数についてはこちら
演算子について
式の中で「計算する記号」のことを演算子(えんざんし)と呼びます
算術演算子
C言語でよく使う演算子はいろいろありますが、まずはこの基本的なものを押さえておきましょう
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
+ | 値を足す | 3 + 2 | 5 |
– | 値を引く | 3 – 2 | 1 |
* | 値を掛ける | 3 * 2 | 6 |
/ | 値を割る | 5 / 2 | 2 |
% | 割った余りを求める | 5 % 2 | 1 |
#include<stdio.h>
int main(void) {
int a = 5;
int b = 2;
print("a + b = %d\n", a + b);
print("a - b = %d\n", a - b);
print("a * b = %d\n", a * b);
print("a / b = %d\n", a / b);
print("a % b = %d\n", a % b);
}
/*出力結果
a + b = 7
a - b = 3
a * b = 10
a / b = 2
a % b = 1
*/
int 型で計算をしているため、割った時に小数点がつくことはありませんが、float 型や double 型を使えば、小数点付きで値を出力することができます
比較演算子
数値を「比べる」ために使う演算子。結果は true または false が返ってきます
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
== | 左右が等しい | 3 == 3 | true |
!= | 左右が等しくない | 3 != 2 | true |
< | 左 < 右 | 2 < 5 | true |
> | 左 > 右 | 5 > 2 | true |
<= | 左 ≦ 右 | 3 <= 3 | true |
>= | 左 ≧ 右 | 5 >= 3 | true |
#include <stdio.h>
int main(void){
int a = 5;
int b = 2;
printf("a == b : %d\n", a == b);
printf("a != b : %d\n", a != b);
printf("a > b : %d\n", a > b);
printf("a < b : %d\n", a < b);
printf("a >= b : %d\n", a >= b);
printf("a <= b : %d\n", a <= b);
}
/*出力結果
a == b : 0
a != b : 1
a > b : 1
a < b : 0
a >= b : 1
a <= b : 0
*/
// 0 が「false」、1 が「true」です
値の比較だけでなく、文字列の比較など使い方によっては様々な用途で活躍するものなので、覚えておくといいですよ
代入演算子
最も使われる演算子ですでに登場しているものを例に挙げると「int a = 5」のようなところで使用されています。ほかにも覚えておくとコードが楽になるもあります
下の表では a = 5 として、それぞれの結果を表示しています
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
= | 右辺を左辺に代入 | a = 3 | 3 |
+= | 足して代入 | a += 3 | 8 |
-= | 引いて代入 | a -= 2 | 3 |
*= | 掛けて代入 | a *= 2 | 10 |
/= | 割って代入 | a /= 2 | 2 |
%= | 余りを代入 | a %= 2 | 1 |
短絡演算子
主に if文の条件分岐で使われることがほとんどで、左辺の式と右辺の式の条件を満たすことで、ブロック内({})の処理が行われます
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
&& | かつ(AND) | (a > 0 && b > 0) | 両方真なら true |
|| | または(OR) | (a > 0 || b > 0) | どちらかが真なら true |
! | 否定(NOT) | !(a > 0) | 等しくなければ true |
#include <stdio.h>
int main(void){
int a = 0;
int b = 1;
// AND の場合(aが0なのでbの評価はされない)
if (a && b){
printf("ANDの結果:true\n");
} else {
printf("ANDの結果:false\n");
}
// OR の場合(aが1なのでbの評価はされない)
a = 1;
if (a || b){
printf("ORの結果:true\n");
} else {
printf("ORの結果:false\n");
}
return 0;
}
/*出力結果
ANDの結果:false
ORの結果:true
*/
インクリメント・デクリメント演算子
変数を「1だけ増やす・減らす」ための演算子
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
++ | 1増やす | a++ | a = a + 1 と同じ |
— | 1減らす | a– | a = a – 1 と同じ |
※ 前置(++a)と後置(a++)で「式の評価タイミング」が違うので注意!
ビット演算子
プログラムを扱う現場で働いていますが、使ったことがないので知識程度
この表では例として「a = 6(110), b = 3(011)」としています
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
& | ビットAND | a & b | 2(010) |
| | ビットOR | a | b | 7(111) |
^ | ビットXOR | a ^ b | 5(101) |
~ | ビット反転 | ~ a | 1(001) |
>> | 左シフト | a << 1 | 12(1100) |
<< | 右シフト | a >> 1 | 3(011) |
ビット演算子は普段使われないことの方が多いですが、効率の良い処理やハード制御ではよく出てくるそうです
ビット演算子について詳しく
【AND】両方1の時に1、それ以外は0にする
【OR】両方0のみの時は0、それ以外は1にする。繰り上げのない足し算のイメージ
【XOR】両方が異なるときは1、等しいときは0にする
【NOT】0の時は1、1の時は0と値を反転させる