第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; }
© Copyright 2025 ExpyDoc