我有一个看起来像这样的宏:
Foo(x) ((x - '!') & 070)
如果我调用以下代码:
Foo('1') => 16
但是,如果我调用以下代码:
(('1' - '!') & 70) => 0
所以我的问题是,这里发生了什么?为什么x & 070
计算到x
但x & 70
计算到0?
我的猜测是左侧的额外 0 迫使 60 占用 2 个字节而不是 1。在这种情况下,按位 & 不会如下所示吗?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000