2011-06-16 15 views
26

Duplicar posible:
Is there a printf converter to print in binary format?Cómo imprimir número binario a través de printf

Aquí es mi programa

#include<stdio.h> 
int main() 
{ 
    int i,a=2; 
    i=~a; 
    printf("a=%d\ni=%d\n",a,i); 

    return 0; 
} 

La salida es

a=2 
i=-3 

Quiero que esto se imprima en binario. Hay% x,% o, y% d que son para números hexadecimales, octales y decimales, pero ¿para imprimir en binario en printf?

+6

http://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format – cnicutar

+2

¿Realmente quieres un binario? El hexadecimal a menudo es igual de bueno (o incluso mejor), ya que mapea cada 4 bits en un dígito hexadecimal, lo que le proporciona una representación compacta y expresiva de los datos binarios. –

+3

@Kerrek ¿realmente estás diciendo que ver un número en su representación binaria es inútil? Intente analizar un número flotante en dígitos hexadecimales: P –

Respuesta

40

printf() no es compatible directamente con eso. En cambio, debes hacer tu propia función.

Algo así como:

while (n) { 
    if (n & 1) 
     printf("1"); 
    else 
     printf("0"); 

    n >>= 1; 
} 
printf("\n"); 
+50

Esto imprime la representación binaria al revés –

+0

@David Heffernan ¿Cómo podemos escribir qué soporte tanto de placa 32bit como de 64 bits? – kapilddit

+1

@hexa make function & use recursión para corregir el orden de impresión. ¿Será útil? – kapilddit

36

Aunque ANSI C no tiene este mecanismo, es posible utilizar itoa() como un acceso directo:

char buffer [33]; 
    itoa (i,buffer,2); 
    printf ("binary: %s\n",buffer); 

Aquí está el origen:

itoa in cplusplus reference

No es estándar C, pero K & R mencionó la implementación en el libro C, por lo que debería ser bastante común. Debería estar en stdlib.h.

+1

en caso de que / no funcionen para usted, aquí hay una implementación rápida de roll-your-own @ http://www.strudel.org.uk/itoa – evandrix

Cuestiones relacionadas