en tu caso hiciste una comparación binaria, sin embargo hay cosas en tu codigo que deberían ser corregidas
esto está mal
ya que el numero más grande que puede calcular en binario es 64
for(i=0; bits > 0; i++){
if(numero & bits){
printf("1");
entero += bits;
}
else{
printf("0");
}
bits /=2;
}
printf(" ==> decimal %d\n\n", entero);
cada ciclo ve si bits > 0, luego hace un and entre bits y el numero... (de estar bien) es algo así
numero = 1000
ciclo 1:
1111101000 AND
1000000000
compara a 0 e imprime, luego divide bit/2
ciclo 2:
1111101000 AND
0100000000
compara a 0 e imprime, luego divide bit/2
ciclo 3:
1111101000 AND
0010000000
compara a 0 e imprime, luego divide bit/2
.... etc hasta que bit == 0
agrego:-----
Plantéate poner while(bits>0) en vez del for.
bits = 2^(sizeof(int)*8-1)
(?)
ivancea96 recuerda que "^" es XOR, es mejor plantearlo como
1<<(sizeof(int)*8-1)