C言語よく使う演算子

C言語

よく使う演算子をまとめておきます

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バイト

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;

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の全ビット反転

&~ の 使用例

0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1
x
1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
~(1U << 3) 4桁目だけ0
0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1
x & ~(1U << 3) 4桁目だけ0にする

| の 使用例

0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1
x
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
1U << 3 4桁目だけ1
0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1
x | (1U << 3) 4桁目だけ1にする

^ の 使用例

0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1
x
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
1U << 3 4桁目だけ1
0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1
x ^ (1U << 3) 4桁目だけ反転

1U は、1桁目のみ 1です(他の桁は、全て0)

if (x & 1U)

x の1ビット目が 1 であるかを判定することができます

0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
x
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1U
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
x & 1U

(x >> n) | (x << (16 - n))

x をにnビット回転した値を得ることができます

0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1
x
0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
x >> n
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
x << (16 - n)
1 0 0 1 0 0 1 1 0 0 0 0 0 0 1 1
(x >> n) | (x << (16 - n))

左回転の場合は、

(x << n) | (x >> (16 - n))

コメント

この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
タイトルとURLをコピーしました