『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, MacOS Ventura 13.3.1, clang 14.0.3]
問1.4.6の解法は以下の通りです。符号付き整数型ですからビット番号7(右から8番目)は符号を表します。
計算3で少し手間取りました。
#include <stdio.h>
#define PRINT(int) printf("%d\n",int)
int main() {
int x , y;
x = 1; y = -1;
// 問1.4.6
PRINT( ~x | x); // -1
// ビット反転演算子~を優先
PRINT(~x); // -2
PRINT( (~x) | x); // -1
// 計算1: ~x
// x = 0b00000001
// ~ --------------
// 0b11111110
// 計算2: (~x) | x
// Lt = 0b11111110
// x = 0b00000001
// | -------------
// 0b11111111(符号付き -128から127まで)
// 計算3:10進数へ変換
// 0b11111111の最上位ビット(右から8番目)は1なので負数
// 反転したビットに1を加える
// 0b00000000 + 1 = 0b00000001 = 10進数1
// 負数なのでマイナスを付けて10進数-1になる
return 0;
}
-1
-2
-1