logo

Diferencia entre el especificador de formato %d y %i en lenguaje C

Un especificador de formato es un carácter especial o una secuencia de caracteres que se utiliza para definir el tipo de datos que se imprimirán en la pantalla o el tipo de datos que se escanearán desde la entrada estándar. Un especificador de formato comienza con un carácter '%' seguido de la secuencia de caracteres para diferentes tipos de datos.

En definitiva, nos dice qué tipo de datos almacenar y cuáles imprimir. Los especificadores de formato se utilizan principalmente con las funciones scanf() y printf().



Por ejemplo, si queremos leer e imprimir un número entero usando escaneo() y funciones printf(), se usa %i o %d pero hay una diferencia sutil en ambas %i y %d especificador de formato .

CSS flotante

%d especifica un entero decimal con signo, mientras que %i especifica un entero de varias bases.

'%d' y '%i' se comportan de manera similar con printf()

No hay diferencia entre los especificadores de formato %i y %d cuando se usan con printf.



Considere el siguiente ejemplo.

C






// C program to demonstrate> // the behavior of %i and %d> // with printf statement> #include> int> main()> {> >int> num = 9;> >// print value using %d> >printf>(>'Value of num using %%d is = %d '>, num);> >// print value using %i> >printf>(>'Value of num using %%i is = %i '>, num);> >return> 0;> }>

>

>

Producción

Value of num using %d is = 9 Value of num using %i is = 9>

El comportamiento de %d y %i es diferente con scanf()

%d asume la base 10 mientras %i detecta automáticamente la base.

Por lo tanto, ambos especificadores se comportan de manera diferente cuando se usan con una función de entrada. Entonces, el valor de 012 sería 10 con %i pero 12 con %d.

    %d toma un valor entero como un entero decimal con signo, es decir, toma valores negativos junto con valores positivos, pero los valores deben estar en decimal, de lo contrario imprimirá un valor basura.
    ( Nota : Si la entrada está en formato octal como 012, entonces %d ignorará 0 y tomará la entrada como 12).
    %i toma un valor entero como un valor entero con tipo decimal, hexadecimal u octal.
    Para ingresar un valor en formato hexadecimal, el valor se debe proporcionar antes de 0x y para ingresar un valor en formato octal, el valor se debe proporcionar antes de 0.

Considere el siguiente ejemplo.

C




// C program to demonstrate the difference> // between %i and %d specifier> #include> int> main()> {> >int> a, b, c;> >printf>(>'Enter value of a in decimal format:'>);> >scanf>(>'%d'>, &a);> >printf>(>'Enter value of b in octal format: '>);> >scanf>(>'%i'>, &b);> >printf>(>'Enter value of c in hexadecimal format: '>);> >scanf>(>'%i'>, &c);> >printf>(>'a = %i, b = %i, c = %i'>, a, b, c);> >return> 0;> }>

java convierte int a cadena

>

>

Producción

Enter value of a in decimal format: 12 Enter value of b in octal format: 012 Enter value of c in hexadecimal format: 0x12 a = 12, b = 10, c = 18>

Explicación

  • El valor decimal de a como 12 es 12
  • El valor decimal de b como 12(octal) es 10
  • El valor decimal de c como 12 (hexadecimal) es 18