#include <stdio.h>
#include <stdlib.h>
#define SIZEOF(arr) (sizeof(arr) / sizeof(arr[0]))
#define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
int main()
{
/* The powers of 10 */
int pot[] = {
0001,
0010,
0100,
1000
};
int i;
for(i=0;i<SIZEOF(pot);i++)
PrintInt(pot[i]);
return 0;
}
以下代码的输出是
锅[I]:1个
锅[I]:8个
锅[I]:64个
锅[I]:1000
为什么它会给出这样的输出?`
答案 0 :(得分:9)
在C中用0位数字前缀数字文字将以八进制形式输出,这是一个基数为8的数字系统。
Oct(1)= Dec(1)
Oct(10)= Dec(8)
Oct(100)= Dec(64)
你的号码来自哪里。
仅供参考,十六进制文字的前缀为0x,二进制文字的前缀为0b(IIRC)
编辑:要真正回答您的问题,只需从数字中删除前导零,它就会为您提供所需的输出。
答案 1 :(得分:2)
以零开头的数字文字被解释为在八进制 - 基数为8.因此前三个数字是八进制数1,10和100(基数为1,8和64) 10);最后一个数字是10。
答案 2 :(得分:-1)
根据您的常量的定义方式以及您的问题的措辞,我认为您需要十六进制。使用&#34; 0x&#34;:
为您的值添加前缀
int pot[] = {
0x0001,
0x0010,
0x0100,
0x1000
;