>> C言語入門トップに戻る

ビット演算

今回はビット演算について説明します。
今まで計算の為に使用してきた最小単位はchar型の1バイトまでだったと思いますが、
さらにそれより細かい最小単位であるビットで計算することができます。
1バイトは8ビットで構成されています。
1バイトの中に8つの箱があると思ってください。
それぞれは0か1の2進数で表すことができ、8ビットで0~255までの256通りの数字を表すことが出来ます。
2進数の知識がないと難しいので、2進数について学んでからこの講座をお読み下さい。

演算子としては以下のものがあります。

& → 論理積
| → 論理和
^ → 排他的論理和
~ →  否定演算

論理積は、2つのビットを比べて、どちらも1なら1とし、どちらかが0なら0とする、演算方式です。
論理和は、2つのビットを比べて、どちらも1なら1とし、どちらかが1なら1とする、演算方式です。
排他的論理和は、2つのビットを比べて、同じ値なら0とし、片方だけ1ならば1とする、演算方式です。
否定演算は、あるビットが0なら1にし、あるビットが1なら0にする、計算方式です。

なお、C言語では2進数を表す表現がないので、16進数がよく使われます。
16進数を表すには先頭に0xをつけます。
下記のコードを見てください。

#include <stdio.h>

int main(int argc,char **argv)
{
	int test1,test2;

	test1 = 0x0100;
	test2 = 0x0101;

	//論理積
	printf("論理積 test1 & test2 → 0x%04x\n",test1 & test2);

	//論理和
	printf("論理和 test1 | test2 → 0x%04x\n",test1 | test2);

	//排他的論理和
	printf("排他的論理和 test1 ^ test2 → 0x%04x\n",test1 ^ test2);

	//否定演算
	printf("否定演算 ~test1 → 0x%04x\n",~test1);

	
	return 0;
}

これを実行すると、下記のようになります。


16進数表記ですが、各ビットが上記の説明通りに変化していることがわかると思います。
否定演算は桁数が多いですが4バイトで表示されているためです。

ビット演算のメリットとしては、通常の演算より処理が高速になることです。
他にも、各ビットごとをあるフラグとして使うこともできます。

今回の説明は以上です。
次回はプリコンパイル済みヘッダについて説明します。


>> 【プリコンパイル済みヘッダ】に進む
>> C言語入門トップに戻る