我在C中定义了一个整数
#define FOO_VERSION 04042012
当我把它传递给像这样的函数时:
unsigned int version = FOO_VERSION;
bar(version);
传递的实际值是1065994。 我使用GBD验证了这一点,打印了变量版本并通过printf来定义: ' FOO_VERSION'
我的问题是造成这种情况的原因,除非有某种我不知道的类型转换,否则我看不出任何理由?
答案 0 :(得分:3)
04042012
是八进制(基数为8)的整数常量,因为初始值为0.删除它以定义小数(基数为10)的整数:
#define FOO_VERSION 4042012
答案 1 :(得分:2)
以前导0
开头的文字整数是C中的八进制。
因此04042012
(基数8)在(基数10)中为1065994
。
答案 2 :(得分:2)
以0
开头的文字位于基础8
#define FOO_VERSION_8 04042012 // base 8
#define FOO_VERSION 4042012 // base 10
您可以使用printf()
printf("Version %08d\n", FOO_VERSION); // prints 04042012
// ^
答案 3 :(得分:0)
以前导0开头的整数是C中的八进制表示法。
04042012是基数8.没有任何前导符号它是基数10.
您可能也会觉得有趣 前导0x是十六进制(Base 16)。
所以0x10将是16位小数。