10的权力

时间:2014-08-08 17:10:09

标签: c

  #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

为什么它会给出这样的输出?`

3 个答案:

答案 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 ;