为什么按位AND操作16和017会产生意外结果?

Pat*_* Le -1 c++ bit-manipulation

我有以下代码:

#include <iostream>
using namespace std;

int main() {
    int val = 16;
    printf("%d\t%d\t",val,val & 017);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么输出

16   0
Run Code Online (Sandbox Code Playgroud)

并不是

16   16
Run Code Online (Sandbox Code Playgroud)

正如我所期望的布尔操作

16 AND 17 = 16
Run Code Online (Sandbox Code Playgroud)

Bau*_*gen 6

文字017被解释为八进制表示,因为它以a开头0.有关详细信息,请参见此处.现在请注意

(17)_8 == (15)_10 == (1111)_2
Run Code Online (Sandbox Code Playgroud)

然后(16)_10 == (10000)_2结果很清楚.