C中按位运算中的模糊十六进制/八进制值

Diw*_*rma -2 c hex bitwise-operators octal

我觉得我遗漏了一些关于数字系统的基本知识,但我真的很困惑我正在尝试使用按位运算符的下面一段代码:

x=56;
printf("\nHere  :\n%x   %x\n",x,077);
x=x& ~077;
printf("%x\n",x);
Run Code Online (Sandbox Code Playgroud)

它将077视为八进制(hex 3f).如果我只放77,则将其视为十进制(十六进制4d).如果放177,则将其视为十进制(十六进制b1).我指的是Richie和Kernighan的C编程书.

请帮忙.

Joh*_*136 6

完全符合预期.从0开始,它是八进制.从0x开始,它是十六进制.否则,它是十进制的.

问题是什么?

  • 请注意,在字符常量中,''\ 177'`是八进制,即使没有前导零.它与问题中讨论的不同,但可能有点令人困惑.(对于十六进制字符常量,你也可以使用''\ x4D'`.更令人困惑的是,'\ x4Dace'`可以是一个带有实现定义值的单个十六进制(多)字符常量.) (2认同)