2つのビッドパターンのそれぞれの桁に論理演算
~演算子は、引数のデータについて1の補数を与える演算子。ビットの反転として使用するときには自動的な型変換に注意
<問題> 0101 0101 (16進数では 55) と、11110000 (16進数ではF0)について、AND, OR, XORを求めよう。
最初の0101 0101について、パターン1111 0000で論理演算して処理とみるとき、後者のビットパタンをマスクとよぶ。
<実行結果 例。注釈も追加> 16進数によるデータ : 0x55 (0101 0101) マスクパターン : 0xf0 (1111 0000) データのビットパターン AND マスクのビットパターン : 0x50 (WXYZ 0000 WXYZ部は、データが1なら1) データのビットパターン OR マスクのビットパターン : 0xf5 (1111 WXYZ) データのビットパターン XOR マスクのビットパターン : 0xa5 (4ビット反転 WXYZ)
<コメント>
#include <stdio.h> int main (void) { unsigned char data = 0x55u; /* 0101 0101 */ unsigned char mask = 0xF0; /* 1111 0000 */ printf("16進数によるデータ : 0x%02x (0101 0101) \n", data); /* 0xと書いてから16進数2桁 0も表示 */ printf("マスクパターン : 0x%02x (1111 0000) \n", mask); printf("データのビットパターン AND マスクのビットパターン : 0x%02x (WXYZ 0000) \n", data & mask); /* 1とのANDはデータが1かのチェック。「0とのANDはデータが何であれゼロクリア」 */ /* 1とのANDにより、データの1の部分を取り出せる。IPアドレスから、ネットワークアドレスを得る場合の基本処理 */ printf("データのビットパターン OR マスクのビットパターン : 0x%02x (1111 WXYZ) \n", data | mask); /* 「1とのORはデータが何であれ1にセット」。0とのORはデータが1かどうかのチェック */ printf("データのビットパターン XOR マスクのビットパターン : 0x%02x (4ビット反転 WXYZ) \n", data ^ mask); /* 「1とのXORはデータのパターンの反転」。0とのXORはデータが1かどうかのチェック */ return 0; }