我的代码中有很多内容#define.现在一个奇怪的问题已经悄然兴起.
我有这个:
#define _ImmSign 010100
Run Code Online (Sandbox Code Playgroud)
(我正在尝试模拟二进制数)
显然,我希望这个数字变成10100.但是当我使用这个数字时,它变成了4160.
这里发生了什么?我该如何阻止它?
额外
好的,这是因为语言将其解释为八进制.是否有一些聪明的方法来迫使语言将数字解释为整数?如果前导0定义了八进制,而0x定义了十六进制现在我想到它...
Jam*_*lis 13
以a开头的整数文字0被解释为八进制,而不是十进制,与开头的整数文字0x被解释为十六进制的方式相同.
删除前导零,你应该好好去.
另请注意,以下划线后跟大写字母或其他下划线的标识符是为实现保留的,因此您不应在代码中定义它们.
如果您愿意编写不可移植的代码并使用 gcc,则可以使用二进制常量扩展:
#define _ImmSign 0b010100
Run Code Online (Sandbox Code Playgroud)