次のようなマクロがあります。
Foo(x) ((x - '!') & 070)
次のコードを呼び出すと:
Foo('1') => 16
ただし、次のコードを呼び出すと、次のようになります。
(('1' - '!') & 70) => 0
だから私の質問は、ここで何が起こっているのかということです。なぜx & 070
計算x
するx & 70
のに0まで計算するのですか?
私の推測では、左側の余分な0は、60に1ではなく2バイトを強制していると思います。その場合、ビット単位の&は次のようになりませんか?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000