Es común que utilicemos números enteros en nuestros programas, olividándonos de su representación binaria en memoria. En este programa se va a iterar bit por bit por un entero. El primer problema es que los enteros int en C cambian dependiendo de la arquitectura. Si bien es común que contenga 32 bits, esto no es completamente cierto. Para ellos se asumen que cada Char equivale a 8 bits (algo que no es necesariamente cierto) y a través de sizeof se logra identificar el tamaño de un int. Sup es la variable del límite superior o tamaño del entero. sup será el contador que se disminuirá, mientras se imprime bit por bit.

#include<stdio.h>
#define CHAR_BITS 8

void
print_binint(int num)
{
int sup = CHAR_BITS*sizeof(int);
while(sup >= 0)
{
if(num & (((long int)1) << sup))
printf("1");
else
printf("0");
sup--;
}
printf("\n");
}


int main()
{
int num;
printf("introduzca un numero entero:");
scanf("%d", &num);
printf("Número binario\n");
print_binint(num);
return 0;
}

Con el programa anterior, se logra el objetivo. Si se requiere, por otro lado invertir el número, esto se hace de manera sencilla invirtiendo el ciclo.


void
print_binint_invertido(int num)
{
int sup = CHAR_BITS*sizeof(int);
int i = 0;
while(sup > i)
{
if(num & (((long int)1) << i))
printf("1");
else
printf("0");
i++;
}
printf("\n");
}