[C言語] Cパズルブック 1.4.3 ビット演算子 ビットXOR

『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, MacOS Ventura 13.3.1, clang 14.0.3]

問1.4.3の解法は以下の通りです。

#include <stdio.h>
#define PRINT(int) printf("%d\n",int)

int main() {
    int x , y, z;
    
    // 先頭に0を付けると8進数になる
    x = 03; y = 02; z = 01;

    // 問1.4.3
    PRINT( x ^ y & ~z);   // 1

    // 補数~,ビット積&を優先
    PRINT( x ^ (y & (~z))); // 1

    // 計算1: ~z(zの補数)
    // z = 0b00000001
    // ~ --------------
    //     0b11111110

    // 計算2: y & ~z
    // y  = 0b00000010
    // ~z = 0b11111110
    // & --------------
    //      0b00000010

    // 計算3: x ^ (y & ~z)
    // x  = 0b00000011
    // Rt = 0b00000010
    // ^ --------------
    //      0b00000001
    // ビットXOR:同じ0,違う1
    // よって10進数1になる

    return 0;
}
1
1