ここでは、複合代入演算子、条件演算子、sizeof演算子を取り上げます。また、演算子の優先順位と結合規則についても説明します。
1. 複合代入演算子
「a = a + b;」のような単純代入演算子を用いた演算は、「a += b;」のように、複合代入演算子を用いた形に書き換えることができます。
一般記法による例 | 複合代入演算子を使った例 |
---|---|
a = a + b; | a += b; |
a = a – b; | a -= b; |
a = a * b; | a *= b; |
a = a / b; | a /= b; |
a = a % b; | a %= b; |
a = a & b; | a &= b; |
a = a ^ b; | a ^= b; |
a = a | b; | a |= b; |
a = a << b; | a <<= b; |
a = a >> b; | a >>= b; |
2. 条件演算子
条件式を用いて演算をおこなうことができます。これは、
条件式 ? 式1 : 式2
という書式で、条件式が「真」なら「式1」を、「偽」なら「式2」を値とします。
2値の大小関係を比較するプログラムは以下のように書けます。
// 条件演算子で書いた例
int a, b, max;
scanf("%d%d", &a, &b);
max = (a >= b) ? a : b;
printf("max = %d\n", max);
// if文で書いた例
int a, b, max;
scanf("%d%d", &a, &b);
if (a >= b) {
max = a;
} else {
max = b;
}
printf("max = %d\n", max);
【実行結果例】
123 45
max = 123
※ 水色字はキーボードからの入力
また、10ごとに改行する例は以下のように書けます。
// 条件演算子で書いた例
for (int i = 1; i <= 30; i++) {
printf("%2d%c",
i, (i % 10)? ' ': '\n');
}
// if文で書いた例
for (int i = 1; i <= 30; i++) {
printf("%2d", i);
if ((i % 10) != 0) {
printf(" ");
} else {
printf("\n");
}
}
【実行結果例】 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
〇 演習問題
コマンドラインから整数値を入力し、奇数か偶数かを表示するプログラムを作成せよ。
ただし、奇数/偶数の判定は if文ではなく、条件演算子を用いること。
【実行結果例】


解答例
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a;
if (argc != 2) {
printf("引数の数が違います\n");
return 0;
}
a = atoi(argv[1]);
printf("%d は ", a);
printf("%s\n", (a % 2) ? "奇数" : "偶数");
return 0;
}
3. sizeof演算子
(1) 型のサイズを求める
型名(intやdouble)などのデータ型のサイズを求めるときに用います。
sizeof( 型名 )
(2) 式のサイズを求める
式のサイズ ( バイト数 ) を求めるときに用います。
sizeof 式
// sizeof演算子の使用例
#include <stdio.h>
int main(void)
{
char ch[10];
int data[20];
printf("char のサイズ : %2d\n", sizeof(char));
printf("int のサイズ : %2d\n", sizeof(int));
printf("配列 ch のサイズ : %2d\n", sizeof(ch));
printf("配列 ch の要素数 : %2d\n", sizeof(ch) / sizeof(ch[0]));
printf("配列 data のサイズ : %2d\n", sizeof(data));
printf("配列 data の要素数 : %2d\n", sizeof(data) / sizeof(data[0]));
return 0;
}
【実行結果例】
char のサイズ : 1
int のサイズ : 4
配列 ch のサイズ : 10
配列 ch の要素数 : 10
配列 data のサイズ : 80
配列 data の要素数 : 20
4. 演算子の優先順位と結合規則
一つの式の中に複数の演算子が含まれる場合、次のように優先順位と結合規則が決まります。
- 優先順位: 式中に現れた演算子のどれから先に演算を行うか
- 結合規則: 式中に現れた演算子の優先順位が同一であった場合に、どの演算子と結合し演算を行うか
種類 | 演算子 | 結合規則 | 優先順位 |
---|---|---|---|
関数, 添字, 構造体, 後置増分減分 | () [] . -> ++ — | 左→右 | 高 ↑ | | | | | | | | | | | | | | 低 |
前置増分減分, 単項式 | ++ — ! ~ + – * & sizeof | 左←右 | |
キャスト | (型) | ||
乗除余 | * / % | 左→右 | |
加減 | + – | ||
シフト | << >> | ||
比較 | < ← > >= | ||
等値 | == != | ||
ビットAND | & | ||
ビットXOR | ^ | ||
ビットOR | | | ||
論理AND | && | ||
論理OR | || | ||
条件 | ?: | 左←右 | |
代入 | = += -= *= /= %= &= ^= |= <← >>= | ||
コンマ | , | 左→右 |
コメント