2.2 ビットごとの論理演算子


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;
}