Qual a diferença entre %i e %d em C?

Antes de falarmos sobre a diferença entre %i e %d precisamos primeiro discutir sobre números octavos, decimais e hexadecimais.

Em matemática é possível exprimir um mesmo número em bases diferentes ou sistema numéricos diferentes. Esse assunto pode se extender um pouco e é mais relacionado à matemática, então vou deixar esse link da wikipedia caso você queira se aprofundar no assunto.

Em C, números octavos são identificados pelo número zero antes dos de mais dígitos. Por exemplo: 01750(octal) representa o número 1000(decimal).

Números hexadecimais são identificados por 0x(zero e x) antes dos de mais dígitos. Por exemplo: 0x3E8(hexadecimal) representa o número 1000(decimal).

Agora que você já sabe que é possível escrever o mesmo número em bases diferentes vamos prosseguir.

Utilizar %i ou %d em funções de output, por exemplo printf(), é a mesma coisa. Normalmente eu utilizo %i simplesmente porquê aprendi dessa maneira e virou uma habitude. Isso não quer dizer que utilizar %d seja errado.

Isso quer dizer que:

int a = 1000; // número 1000 escrito na base de 10(decimal)

int b = 01750; //número 1000 escrito na base de 8(octal)

int c = 0x3E8; //número 1000 escrito na base de 16(hexadecimal)

//Utilizar %i ou %d para output, não tem diferença

printf("%i\n", a);

printf("%i\n", b);

printf("%i\n", c);

printf("\n");

printf("%d\n", a);

printf("%d\n", b);

printf("%d\n", c);

São exatamente a mesma coisa.

Mas o mesmo não acontece tratando-se de funções de input, por exemplo scanf().

Utilizar %d implica que o valor digitado pelo usuário será interpretado como um número inteiro decimal.

int a;

scanf("%d", &a)

Valor fornecido pelo usuário será necessariamente interpretado como inteiro decimal.

Utilizar %i permite o usuário informar valores na base de 8, 10 e 16.

int a;

scanf("%i", &a)

Permite o usuário informar números inteiros no formato decimal, por exemplo:
1000

Informar números inteiros no formato octal, por exemplo:
01750

Informar números inteiros no formato hexadecimal, por exemplo:
0x3E8

Acho que isso cobre tudo. Espero que esse artigo tenha te ajudado e até a próxima.

4 thoughts on “Qual a diferença entre %i e %d em C?

  1. perfeito intendi … muito obrigado

  2. Cara muito obrigado pelo o esclarecimento, esta de parabéns todo o seu trabalho aqui no blog e no vlog com as vídeos aulas, parabéns mesmo. você é um profissional de mão cheia.

  3. italo,
    agradeço imensamente sua generosidade em ceder tempo para ajudar os que ainda nao tem teu conhecimento….parabéns!

  4. obg pela explicação .. estava me perguntando sobre isso, e vc me esclareceu ^^.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s