演算子
演算子は、値を変数に格納したり、四則演算、変数や数値の比較などを行うときに使用する記号です。
演算子には、値を変数に代入する代入演算子、複合代入演算子、四則演算などの計算をする算術演算子、モジュロ演算子、条件比較をする関係演算子、論理演算子、ビット単位の計算をするビット演算子があります。
算術演算子・代入演算子・複合代入演算子
算術演算子は、四則演算を行う演算子です。代入演算子は、式の代入を行う演算子で、複合代入演算子は、四則演算等の他の演算と代入演算を合わせた演算子になります。
演算子 | 演算 | 説明 |
+ | 和 | 足し算を行う演算子 |
– | 差 | 引き算を行う演算子 |
* | 積 | 掛け算を行う演算子 |
/ | 徐 | 割算を行う演算子 |
% | 余 | 整数に対して割り算の余りを返す演算子(モジュロ演算子) |
= | 代入 | 右辺を左辺に代入する演算子 |
+= | 和と代入の複合 | 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」を返します。
演算子 | 演算 | 説明 |
&& | AND | A && B 右辺B かつ 左辺A かどうかを評価する |
|| | OR | A || 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つの式の中での複雑な演算は避けるようにプログラムを作るべきですが、演算子が複数個あるような条件式を使う場合には、優先順位を明確にするため括弧「()」で括るようにして誤り防止を行うとよいと思います。
コメント