为什么%d代表整数?


76

我知道这听起来并不奏效,但是我正在寻找一种方法来记住所有printf呼叫的格式代码。%s%p%f都是显而易见的,但我不明白的地方%d,从说到。是%i已经采取别的东西吗?


21
我最好的猜测是十进制
Juan Mendes 2012年

是的,这是一个具有讽刺意味的+1,有趣的问题。
丹尼尔(Daniel)

虽然这不是一个真正的编程问题,但我倾向于解决这些问题:)
Juan Mendes 2012年

9
“ d”代表“代表整数”。很简单。
loneboat 2012年

Answers:


96

它代表“十进制”(以10为底),而不是“整数”。您可以使用%x十六进制(基数16)%o打印,也可以以八进制(基数8)打印。整数可以是任何这些基数。

在中,如果您更希望表示“整数”而不是“十进制”,则printf()可以将其%i用作的同义词%d,但%d通常更受欢迎,因为它更具体。

输入时,使用scanf(),您也可以同时使用%i%d%i表示将其解析为任何基数的整数(八进制,十六进制或十进制,由a00x前缀表示),而%d表示将其解析为十进制整数。

以下是所有这些实例的示例:

#include <stdio.h>

int main() {
  int out = 10;
  int in[4];

  printf("%d %i %x %o\n", out, out, out, out);
  sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
  printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
  sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
  printf("%d %d %d\n", in[0], in[1], in[2]);

  return 0;
}

因此,仅%i在希望输入库依赖前缀时才应使用;如果输入的基础应该是固定的,你应该使用%d%x%o。特别是,领导0会让您进入八进制模式这一事实可以使您追赶。


那么真正的问题是“为什么Java会调用整数'int'”,当长,短和字节也都是整数时
bharal

7

http://en.wikipedia.org/wiki/Printf_format_string似乎说它是十进制的,就像我猜到的那样

d,i

int为带符号的十进制数字。'%d'和'%i'是输出的同义词,但与scanf()一起用于输入时是不同的(使用%i时,如果数字以0x开头,则将其解释为十六进制;如果数字以0开头,则将其解释为八进制。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.