よく使う演算子をまとめておきます
sizeof
使い方は次の2種類があります
- sizeof(型名)
- sizeof 式
printf("%zuバイト\n", sizeof(char));    // 1バイト
printf("%zuバイト\n", sizeof(short));   // 2バイト
printf("%zuバイト\n", sizeof(int));     // 4バイト
printf("%zuバイト\n", sizeof(long));    // 4バイト
printf("%zuバイト\n", sizeof(double));  // 8バイト
printf("%zuバイト\n", sizeof(short));   // 2バイト
printf("%zuバイト\n", sizeof(int));     // 4バイト
printf("%zuバイト\n", sizeof(long));    // 4バイト
printf("%zuバイト\n", sizeof(double));  // 8バイト
sizeofが生成する値は、処理系によって異なります
%zu は、size_t型に使用する変換指定子です
sizeof が生成するのは、符号無し整数型である次の4つの内のいずれかです。(処理系によって異なります)
unsigned short
unsigned
unsigned long
unsigned long long
そこで、size_t型というデータ型をtypedef宣言により与えています
これにより、どの処理系でもsizeof演算子が生成するのは、size_t型となっています
sizeof(a) / sizeof(a[0])
配列の要素数を求めることもできます
<< と >>
<< と >> をシフト演算子といいます
unsigned a = 100;
unsigned b = 3;
unsigned b = 3;
printf("%u\n" , a << b) // 800
printf("%u\n" , a >> b) // 12
a << b
a を bビット左にシフトさせます
a × 2b の値となります
a >> b
a を bビット右にシフトさせます
a ÷ 2b の値となります
& | ^ ~
& | ^ ~ をビット単位の論理演算子といいます
式 | 値 |
a & b | aとbの論理積 |
a | b | aとbの論理和 |
a ^ b | aとbの排他的論理和 |
~a | aの全ビット反転 |
& と ~ の 使用例
|
x | |||||||||||||||||
|
~(1U << 3) | 4桁目だけ0 | ||||||||||||||||
|
x & ~(1U << 3) | 4桁目だけ0にする |
| の 使用例
|
x | |||||||||||||||||
|
1U << 3 | 4桁目だけ1 | ||||||||||||||||
|
x | (1U << 3) | 4桁目だけ1にする |
^ の 使用例
|
x | |||||||||||||||||
|
1U << 3 | 4桁目だけ1 | ||||||||||||||||
|
x ^ (1U << 3) | 4桁目だけ反転 |
1U は、1桁目のみ 1です(他の桁は、全て0)
if (x & 1U)
x の1ビット目が 1 であるかを判定することができます
|
x | ||||||||||||||||
|
1U | ||||||||||||||||
|
x & 1U |
(x >> n) | (x << (16 - n))
x を右にnビット回転した値を得ることができます
|
x | ||||||||||||||||
|
x >> n | ||||||||||||||||
|
x << (16 - n) | ||||||||||||||||
|
(x >> n) | (x << (16 - n)) |
左回転の場合は、
(x << n) | (x >> (16 - n))
コメント