BIT演算

C/C++などのサイトでよく見るビット演算と言うものがどういうものかちょっとだけ分かってきたので、そのことについて書きます。

いままでビット演算はどのようにやっているのかそもそもよくわからなかったのですが、単純にint型の変数を宣言してその中に代入されている値を2進数で考えるということだけのようです。

例えば、

int x=1, y = 2, w = 4, z = 8;

と宣言すると、それぞれ2進数ではx = 0b0001, y = 0b0010, w = 0b0100, z = 0b1000と表せられます。(語頭の0bは2進数表記であることを表しています。)

このビット演算をif文の条件式の代わりとして使うことができます。

例えば、

#include <stdio.h>

#define BIT(x) 1 << (x)

typedef struct {
	int id;
	int height;
	int weight;
	int score;
} students;

int main(void) {
	students hanako = {1, 160, 52, 70};
	unsigned int id, height, weight, score;
	
	id     = BIT(0);
	height = BIT(1);
	weight = BIT(2);
	score  = BIT(3);

	printf("Press number for displaying info\n");
	printf("0: id, 1: height, 2: weight, 3: score\n>> ");
	unsigned int info, info_bi;
	scanf("%d", &info);

	info_bi = BIT(info);

	if(info_bi == id) {
		printf("id: %d\n", hanako.id);
	} else if(info_bi == height) {
		printf("height: %d\n", hanako.height);
	} else if (info_bi == weight) {
		printf("weight: %d\n", hanako.weight);
	} else if (info_bi == score) {
		printf("score: %d\n", hanako.score);
	}

	return 0;
}

このコードを実行すると、id, height, weight, scoreの内どの情報を表示しますかと聞いてくるので、見たい情報の番号を入力し、Enterを押すとhanakoの情報が表示されます。

これは簡単なプログラムですので、普通にif文を書いたほうが早いしわかりやすいと思いますが、複雑な論理演算の場合いろんな変数を宣言してそれらの論理演算を条件式に用いるより、スッキリした見た目になるのではないでしょうか。

正直あまり使うことはないかもしれませんが、学習の記録程度にまとめてみました。