soh*_*hum 5 c++ ascii bitwise-and
我有一个看起来像这样的宏:
Foo(x) ((x - '!') & 070)
Run Code Online (Sandbox Code Playgroud)
如果我调用以下代码:
Foo('1') => 16
Run Code Online (Sandbox Code Playgroud)
但是,如果我调用以下代码:
(('1' - '!') & 70) => 0
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这里发生了什么?为什么x & 070计算到x但x & 70计算到0?
我的猜测是左边的额外0是强制60取2个字节而不是1.在这种情况下,不会按位并且如下所示?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)
不,额外的0表示该数字被读为八进制(基数为8).这意味着它不会说70,而是56:
0000 0000 0001 0000 '16
0000 0000 0011 1000 & '56
-------------------
0000 0000 0001 0000
Run Code Online (Sandbox Code Playgroud)