月ノ書

<C言語>式と演算子

今回の記事でわかること
  • 式の扱い方が分かる
  • 演算子の種類が分かる

式とは

プログラミングでいう「式」とは、値や変数、演算子を組み合わせて「計算できるもの」のことを指します

算数で「1+2」と書いたら「3」になるのと同じで、プログラミングでも「式」を書けば結果が出てきます

int num = 1 + 2;
print("%d", num);

/*出力結果
3
*/

この場合、1 + 2 が式であり、その結果 3 が num に代入されます

変数についてはこちら

演算子について

式の中で「計算する記号」のことを演算子(えんざんし)と呼びます

算術演算子

C言語でよく使う演算子はいろいろありますが、まずはこの基本的なものを押さえておきましょう

演算子説明結果
+値を足す3 + 25
値を引く3 – 21
*値を掛ける3 * 26
/値を割る5 / 22
%割った余りを求める5 % 21
#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 == 3true
!=左右が等しくない3 != 2true
<左 < 右2 < 5true
>左 > 右5 > 2true
<=左 ≦ 右3 <= 3true
>=左 ≧ 右5 >= 3true
#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 = 33
+=足して代入a += 38
-=引いて代入a -= 23
*=掛けて代入a *= 210
/=割って代入a /= 22
%=余りを代入a %= 21

短絡演算子

主に 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)」としています

演算子説明結果
&ビットANDa & b2(010)
|ビットORa | b7(111)
^ビットXORa ^ b5(101)
~ビット反転~ a1(001)
>>左シフトa << 112(1100)
<<右シフトa >> 13(011)

ビット演算子は普段使われないことの方が多いですが、効率の良い処理やハード制御ではよく出てくるそうです

ビット演算子について詳しく

【AND】両方1の時に1、それ以外は0にする

【OR】両方0のみの時は0、それ以外は1にする。繰り上げのない足し算のイメージ

【XOR】両方が異なるときは1、等しいときは0にする

【NOT】0の時は1、1の時は0と値を反転させる

学習進捗

0
Would love your thoughts, please comment.x