第4章

第4章
演算子
表4-1算術演算子
演算子
説明
加算
+
減算
-
記述例
a = b + c;
a = b - c;
*
乗算
a = b * c;
/
除算
a = b / c;
%
余り
a = b % c;
算術演算子の使用例
#include <stdio.h>
Int main(void)
{
int a, b, nn;
double d1, d2, dd;
a = 100;
b = 30;
nn = a + b; printf(“a+b=%d\n”, nn);
ー加算
nn = a - b; printf(“a-b=%d\n”, nn);
ー減算
nn = a * b; printf(“a*b=%d\n”, nn);
ー乗算
nn = a / b; printf(“a/b=%d\n”, nn);
ー整数除算
nn = a % b; printf(“a%%b=%d\n”, nn); ー整数除算の余り
d1 = 90.0;
d2 = 40.0;
dd = d1 / d2; printf(“d1/d2=%f\n”, dd);
return 0;
}
ー浮動小数点数除算
実行結果
a+b=130
a-b=70
a*b=3000
a/b=3
a%b=10
d1/d2=2.250000
-加算
-減算
ー乗算
-整数の除算
ー整数除算の余り
ー浮動小数点の除算
整数計算と浮動小数点数計算
int idt = 10
double ans, ddt = 4.0;
ans
ans
ans
ans
ans
=
=
=
=
=
idt / ddt;
10/ 4;
10.0 / 4;
10 / 4.0;
10.0 / 4.0;
-ansは2.5。ddtがdouble型なのでdouble型で計算
-ansは2。両方int型なのでint型で計算
-ansは2.5。「10.0」がdouble型なのでdouble型で計算
-ansは2.5。「4.0」がdouble型なのでdouble型で計算
ーansは2.5。両方double型なのでdouble型で計算
算術演算子の優先順位
dt
dt
dt
dt
dt
dt
=
=
=
=
=
=
1 + 2 * 3;
(1 + 2) * 3;
4 * 5 + 6;
4 * (5 + 6);
200 / 10 / 5;
200 / (10 / 5);
ーdtは7になる。2*3を先に計算する
ーdtは9になる。()内が先に計算される
ーdtは26になる。
ーdtは44になる。()内が咲きに計算される
-dtは4。左側の200/10を先に計算
-dtは100。10/5を先に計算
表4-2 算術演算子
演算子
説明
記述例
<
小さい
if (a < b)
<=
小さいか等しい
if (a <= b)
>
大きい
if (a > b)
>=
大きいか等しい
if (a >= b)
リスト 関係演算子の使用例
#include <stdio.h>
int main(void)
{
int dt;
printf(“数値を入力してください: “);
scanf(“%d”, &dt);
if (dt > 100)
ー変数dtの値が100より大なら
printf(“数値は100より大きい\n”); ーこれを実行
else
-そうでなければ
printf(“数値は100以下である\n”); ーこれを実行
return 0;
}
実行結果
数値を入力してください: 120
数値は100より大きい
if ( ! (a==10) )
if ( !myflg)
if (a==10 && b==20)
if (a==10 || b==20)
ー「aが10」でないなら
-「myflgが真」でないなら
ーaが10で かつ bが20なら
ーaが10 または bが20なら
表4-4 論理演算子
演算子
説明
記述例
!
否定(NOT)
if (!myflg)
&&
論理積(AND : かつ)
if (a<10 &&<b<20 )
||
論理和(OR : または)
if (a==2 || a==4)
リスト 論理演算子の使用例
#include <stdio.h>
int main(void)
{
int nn;
for (nn=1; nn<=5; nn++) {
printf(“nn=%d\n”, nn);
if (nn>=2 && nn<=4)
―AND(&&)を使う
printf(“ nnは 2以上かつ4以下\n”);
if (nn<2 || nn>4)
―OR(||)を使う
printf(“ nnは 2未満または4より大\n”);
if (! (nn==1 || nn==3) )
―NOT(!)とOR(||)を使う
printf(“ nnは[1または3]ではない\n”);
}
return 0;
}
表4-5 インクリメント/デクリメント演算子
演算子
説明
記述例
++
1加算
++a;またはa++;
--
1減算
--a;またはa--;
通常、変数aの値を1加算するときは、
a = a + 1;
としますが、インクリメント演算子を用いると
++a;
a++;
-aの値を1加算する
ーこのように書いてもよい
a = b++; -後置型なので後加算を行なう
と記述すると、
a = b;
ー本来の処理をしてから
b = b + 1 -あとで加算をする
表4-6 インクリメント演算子、デクリメント演算子の効果
結果
最初のbの値
5
記述
aの値
bの値
++b;
ー
6
b ++;
ー
6
a = ++b;
6
6
a = b++;
6
--b;
5
ー
b--;
ー
4
a = --b;
4
4
a = b--;
5
4
4
リスト インクリメント演算子の使用例
#include <stdio.h>
int main(void)
{
int n;
int dt[ ] = {0, 10, 20, 30, 40, 50};
printf(“----テスト1\n”);
n = 2;
printf(“n=%d\n”, n);
-現在のnの値を表示
printf(“dt[n]=%d\n”, dt[n]); -dt[n]の値を出力
++n;
-nを1加算
printf(“dt[n]=%d\n”, dt[n]); -次のdt[n]を出力
++n;
-nを1加算
printf(“dt[n]=%d\n”, dt[n]); -次のdt[n]を出力
printf(“----テスト2\n”);
n = 2;
printf(“n=%d\n”, n);
printf(“dt[n]=%d\n”, dt[n++]);
printf(“dt[n]=%d\n”, dt[n++]);
printf(“dt[n]=%d\n”, dt[n++]);
ー現在のnの値を表示
-dt[n]の値を出力後、nを1加算
-同上
-同上
printf(“----テスト3\n”);
n=2
printf(“n=%d\n”, n);
printf(“dt[n]=%d\n”, dt[++n]);
printf(“dt[n]=%d\n”, dt[++n]);
printf(“dt[n]=%d\n”, dt[++n]);
ー現在のnの値を表示
-nを加算後、dt[n]の値を出力
-同上
-同上
return 0;
}
表4-7 代入演算子
単純代入演算子
=
複合代入演算子 += -= *= /= %= &= ^= |= <<= >>=
表4-8 ビット演算子
演算子
説明
記述例
&
ビットごとのAND
a = b & 0x7FFF;
|
ビットごとのOR
a = b | 0x8000;
^
ビットごとのXOR
a = b ^ 0x00F;
~
ビットの反転(1の補数) a = ~a;
<<
左シフト
a = a << 2;
>>
右シフト
a = a >> 2;
リスト ビット論理演算子の使用例
#include <stdio.h>
int main(void)
{
int a = 0x00005555;
int b = 0x000000FF;
int c;
printf(“a = %08x\n”, a);
printf(“b = %08x\n\n”, b);
c = a & b;
printf(“& = %08x\n”, c);
c = a | b;
printf(“| = %08x\n”, c);
c = a ^ b;
printf(“^ = %08x\n”, c);
c = ~a;
printf(“~ = %08x\n”, c);
return 0;
}
練習問題1 解答例
#include <stdio.h?>
int main(void)
{
double r;
printf(“半径を入力してください:”);
scanf(“%1f”, &r);
printf(“円周=%f\n”, 2.0 * r * 3.13159);
printf(“円面積=%f\n”, r * r * 3.14159);
return 0;
}
練習問題2 解答例
#include <stdio.h?>
int main(void)
{
int dt = 100;
dt = dt + 1;
printf(“結果1=%d\n”, dt);
++dt;
printf(“結果2=%d\n”, dt);
dt++;
printf(“結果3=%d\n”, dt);
dt += 1;
printf(“結果4=%d\n”,dt);
return 0;
}