04_式と演算子
式(expression)とは
i=20
のような数式
オペランド
+
,-
,*
,/
一次式
- もっとも基本となる要素
式文
- 式のみからなる文
評価
- 式は評価(evaluation)されて値を持つ。
- 20という式は評価されて20という値を持つ。
printf("%d + %d = %d\n", a, b, a+b);
サンプルコード
/*op01*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=10, b=3;
double c;
int d1=10;
double d2=2.35;
// 10/3=0.3333...
c = a / b;
// 出力結果: 3.0000
printf("int同士の計算だと結果もintになる。\n");
printf("%d ÷ %d = %f\n", a, b, c);
// 出力結果: 12.350000
printf("異なる型で計算を行う時は、大きい型に合わせられる。*格上げ*\n");
printf("%d + %f = %f\n", d1, d2, d1 + d2);
system("pause");
return 0;
}
出力結果
int同士の計算だと結果もintになる。
10 ÷ 3 = 3.000000
異なる型で計算を行う時は、大きい型に合わせられる。*格上げ*
10 + 2.350000 = 12.350000
続行するには何かキーを押してください . . .
- int同士の計算だと結果もintになる。
- 異なる型で計算を行う時は、大きい型に合わせられる。格上げ
各種演算子
優先順位 | 記号 | 意味 | 統合規則 |
---|---|---|---|
1 | () | 関数呼び出し。print(…), main()等 | → |
[] | 配列 | → | |
-> | 構造体メンバ参照 | → | |
. | 構造体メンバ参照 | → | |
++ | 後値増分 | → | |
– | 後値減分 | → | |
2 | ++ | 前値増分 | ← |
– | 前値減分 | ← | |
sizeof | 記憶量 | ← | |
& | アドレス | ← | |
* | 間接参照 | ← | |
+ | 正符号 | ← | |
- | 負符号 | ← | |
~ | 補数(ビット反転) | ← | |
! | 否定 | ← | |
3 | () | キャスト | ← |
4 | * | 乗算 | → |
/ | 除算 | → | |
% | 剰余 | → | |
5 | + | 加算 | → |
- | 減算 | → | |
6 | « | ビット左シフト | → |
» | ビット右シフト | → | |
7 | < | 左不等号(大きい) | → |
<= | 等価左不等号(以上) | → | |
> | 右不等号(小さい) | → | |
>= | 等価右不等号(以下) | → | |
8 | == | 等価 | → |
!= | 非等価 | → | |
9 | & | ビット積 | → |
10 | ^ | ビット差 | → |
11 | | | ビット和 | → |
12 | && | 論理積 | → |
13 | || | 論理和 | → |
14 | ?: | 条件。a?b:cのように使う | → |
15 | = | 代入 | ← |
+= | 加算代入 | ← | |
-= | 減算代入 | ← | |
*= | 乗算代入 | ← | |
/= | 除算代入 | ← | |
%= | 剰余代入 | ← | |
«= | 左シフト代入 | ← | |
»= | 右シフト代入 | ← | |
&= | ビット積代入 | ← | |
^= | ビット差代入 | ← | |
|= | ビット和代入 | ← | |
16 | , | コンマ演算子 | → |
- 演算子は優先順位の高いものから評価される。
a + b * c
b * c = D
- ->
a + D
- 同一順序のときは、結合規則を見る。
d = a / b * c
a / b
の方が先に計算される。
サンプルコード
/*operatorOrder.cpp*/
# include <stdio.h>
# include <stdlib.h>
int main()
{
double height = 1.76, weight = 62.0;
printf("BMIは体重(kg)を身長(m)の2乗を割ったものですが\n");
printf("これが25を超えると肥満です\n");
printf("例えば、身長%4.2fmで体重%4.2fkgの人では\n",height,weight);
printf("%4.2f ÷ (%4.2f × %4.2f) で計算します。\n",weight,height,height);
printf("結果は%4.2f でした。\n", weight / (height * height));
system("pause");
return 0;
}
出力結果
BMIは体重(kg)を身長(m)の2乗を割ったものですが
これが25を超えると肥満です
例えば、身長1.76mで体重62.00kgの人では
62.00 ÷ (1.76 × 1.76) で計算します。
結果は20.02 でした。
続行するには何かキーを押してください . . .
インクリメント・デクリメント演算子
a++
: 評価後にa
の値を1増やすa--
: 評価後にa
の値を1減らす++b
: 評価前にb
の値を1増やす--b
: 評価前にb
の値を1減らす
sizeof演算子
- 書き方
sizeof 式
sizeof(式)
sizeof(型の名前)
- ※
sizeof 型の名前
<- この書き方はできないので注意
- ※
- 式や型のサイズ(バイト単位)を調べることが可能。
- ※ 返り値は
size_t型
サンプルコード
/*sizeOf.c*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*各種変数を宣言*/
char _char = 'A';
short _short = 50;
int _int=10;
unsigned int _unsignedInt = 128;
float _float = 0.5f;
double _double = 2568.2;
long double _longDouble = 1.258E-25;
size_t _size_t;
/*各変数のサイズをsizeof演算子で計測*/
_size_t = sizeof(_char);
printf("size of char is %dバイト\n", _size_t);
_size_t = sizeof(_short);
printf("size of short is %dバイト\n", _size_t);
_size_t = sizeof(_int);
printf("size of int is %dバイト\n", _size_t);
_size_t = sizeof(_unsignedInt);
printf("size of unsigned int is %dバイト\n", _size_t);
_size_t = sizeof(_float);
printf("size of float is %dバイト\n", _size_t);
_size_t = sizeof(_double);
printf("size of double is %dバイト\n", _size_t);
_size_t = sizeof(_longDouble);
printf("size of long double is %dバイト\n", _size_t);
_size_t = sizeof(_size_t);
printf("size of size_t double is %dバイト\n", _size_t);
system("pause");
return 0;
}
出力結果
size of char is 1バイト
size of short is 2バイト
size of int is 4バイト
size of unsigned int is 4バイト
size of float is 4バイト
size of double is 8バイト
size of long double is 8バイト
size of size_t double is 4バイト
続行するには何かキーを押してください . . .
to be continued