C言語 演算子

C言語

演算子

演算子は、値を変数に格納したり、四則演算、変数や数値の比較などを行うときに使用する記号です。

演算子には、値を変数に代入する代入演算子、複合代入演算子、四則演算などの計算をする算術演算子、モジュロ演算子、条件比較をする関係演算子、論理演算子、ビット単位の計算をするビット演算子があります。

算術演算子・代入演算子・複合代入演算子

算術演算子は、四則演算を行う演算子です。代入演算子は、式の代入を行う演算子で、複合代入演算子は、四則演算等の他の演算と代入演算を合わせた演算子になります。

演算子演算説明
+足し算を行う演算子
引き算を行う演算子
*掛け算を行う演算子
/割算を行う演算子
%整数に対して割り算の余りを返す演算子(モジュロ演算子)  
=代入右辺を左辺に代入する演算子
+=和と代入の複合A += B → A = A + B
-=差と代入の複合A -= B → A = A – B
*=積と代入の複合A *= B → A = A * B
/=徐と代入の複合A /= B → A = A / B
#include <stdio.h>

main()
{
    double a = 1.0;
    double b = 2.0;
    double add,sub,mul,div;
    int mod;

    add = a + b;
    sub = a - b;
    mul = a * b;
    div = a / b;
    mod = (int)a % (int)b;

    printf("add=%lf sub=%lf mul=%lf div=%lf ",add,sub,mul,div);
    printf("mod=%d\n",mod);

    add += b;
    sub -= b;
    mul *= b;
    div /= b;   

    printf("add=%lf sub=%lf mul=%lf div=%lf\n",add,sub,mul,div);
    printf("end\n");
}
c:\prog>operator_test
add=3.000000 sub=-1.000000 mul=2.000000 div=0.500000 mod=1
add=5.000000 sub=-3.000000 mul=4.000000 div=0.250000
end

関係演算子

関係演算子は、条件文の条件式に使います。

演算が成立する場合、演算結果「1」を返し、演算が成立しない場合は、演算結果「0」を返します。

演算子演算説明
大きいA > B 右辺Bが左辺Aより大きいかを評価する        
>=等しいか大きいA >= B 右辺Bが左辺A以上かを評価する
小さいA < B 右辺Bが左辺Aより小さいかを評価する
<=等しいか小さいA <= B 右辺Bが左辺A以下かを評価する
==等しいA == B 右辺Bが左辺Aと等しいかを評価する
!=等しくないA != B 右辺Bと左辺Aが異なるかを評価する
#include <stdio.h>

main()
{
    int a = 1;
    int b = 2;
    int c = 1;

    printf("1<2=%d  1>2=%d  1>=1=%d\n",(a<b),(a>b),(a>=c));
    printf("1==1=%d 1==2=%d 1!=1=%d\n",(a==c),(a==b),(a!=c));
    printf("end\n");
}
c:\prog>operator_test2
1<2=1  1>2=0  1>=1=1
1==1=1 1==2=0 1!=1=0
end

論理演算子

関係演算子と同じように論理演算子も条件文の条件式に使います。演算が成立する場合、演算結果「1」を返し、演算が成立しない場合、演算結果「0」を返します。

演算子演算説明
&&ANDA && B 右辺B かつ 左辺A かどうかを評価する
||ORA || B 右辺B または 左辺A かどうかを評価する           
#include <stdio.h>

main()
{
    int a = 1;
    int b = 2;

    printf("1<2 && 1>2=%d\n",((a<b)&&(a>b)));
    printf("1<2 || 1>2=%d\n",((a<b)||(a>b)));
    printf("end\n");
}
c:\prog>operator_test3
1<2 && 1>2=0
1<2 || 1>2=1
end

ビット演算子

ビット演算子は、ビット単位の計算をするときに使います。ビットごとの論理演算やビットシフトを行います。

演算子演算説明
ビットANDビットごとの論理積演算をしてその結果を返す         
ビットORビットごとの論理和演算をしてその結果を返す
EXORビットごとの排他的論理和演算をしてその結果を返す
NOT(反転)各ビットを論理反転してその結果を返す
<<左シフト指定ビット数分だけ値を左にシフトする
>>右シフト指定ビット数分だけ値を右にシフトする
#include <stdio.h>

main()
{
    unsigned char a = 0xFF;
    unsigned char bit0 = 0x01;
    unsigned char bit1 = 0x02;
    unsigned char bit2 = 0x04;
    unsigned char bit3 = 0x08;

    printf("0xFF & 0x01     =%x\n",(a&bit0));
    printf("0xFF | 0x01     =%x\n",(a|bit0));
    printf("0xFF ^ 0x01     =%x\n",(a^bit0));
    printf("~0xFF ~0x01     =%x  %x\n",((unsigned char)~a),((unsigned char)~bit0));
    printf("bit2>>1 bit3>>1 =%x  %x\n",(bit2>>1),(bit3>>1));
    printf("bit2<<1 bit3<<1 =%x  %x\n",(bit2<<1),(bit3<<1));
    printf("end\n");
}
c:\prog>operator_bit_test
0xFF & 0x01     =1
0xFF | 0x01     =ff
0xFF ^ 0x01     =fe
~0xFF ~0x01     =0  fe
bit2>>1 bit3>>1 =2  4
bit2<<1 bit3<<1 =8  10
end

その他の演算子

演算子演算説明
++インクリメント数値を+1する
ーーデクリメント数値をー1する
? :三項演算条件式による評価をする                  

演算子の優先順位

演算子には、優先順位があり、優先順位の高い演算から順番に演算が行われます。1つの式の中での複雑な演算は避けるようにプログラムを作るべきですが、演算子が複数個あるような条件式を使う場合には、優先順位を明確にするため括弧「()」で括るようにして誤り防止を行うとよいと思います。

コメント

タイトルとURLをコピーしました