C的值意外地定义了变化

Nom*_*meN 6 c c-preprocessor

我的代码中有很多内容#define.现在一个奇怪的问题已经悄然兴起.

我有这个:

#define _ImmSign    010100
Run Code Online (Sandbox Code Playgroud)

(我正在尝试模拟二进制数)

显然,我希望这个数字变成10100.但是当我使用这个数字时,它变成了4160.

这里发生了什么?我该如何阻止它?

额外

好的,这是因为语言将其解释为八进制.是否有一些聪明的方法来迫使语言将数字解释为整数?如果前导0定义了八进制,而0x定义了十六进制现在我想到它...

Jam*_*lis 13

以a开头的整数文字0被解释为八进制,而不是十进制,与开头的整数文字0x被解释为十六进制的方式相同.

删除前导零,你应该好好去.

另请注意,以下划线后跟大写字母或其他下划线的标识符是为实现保留的,因此您不应在代码中定义它们.

  • @NomeN:不; 这是该语言的基本部分. (2认同)

R S*_*hko 1

如果您愿意编写不可移植的代码并使用 gcc,则可以使用二进制常量扩展

#define _ImmSign    0b010100
Run Code Online (Sandbox Code Playgroud)