
EnzoFerber
(usa FreeBSD)
Enviado em 10/06/2010 - 15:35h
Faz uma função que retorne um vetor uai.
Por exemplo, assumindo que você só vá trabalhar com 8 bits:
char *dec_bin ( int dec )
{
char *bin = (char *) malloc ( 9 * sizeof(char)); // binario 8-bits
register int i;
for ( i = 0; i < 8; i++ )
bin[i] = ( dec & (128 >> i)) ? '1' : '0';
bin[8] = 0x0;
return bin;
}
Para usar a função:
printf ( "Numero 65 em binario: %s\n", dec_bin (65));
Agora a explicação:
bin[i] = ( dec & (128 >> i)) ? '1' : '0';
Essa linha faz toda a transformação: O operador AND (&) é assim:
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
O outro operador é de deslocamento de bits (>>):
Ele funciona assim:
1000 >> 1 = 0100
1000 >> 2 = 0010
E o numero 128 tem 8 bits, sendo o primeiro 1 e o resto 0.
ou seja:
128 = 10000000
A cada incremento de i, ele vai andar i casas...
i = 0;
128 >> 0 = 128
i = 1;
128 >> 1 = 64
i = 2;
128 > 2 = 32
Até chegar a 7, que será o 8º bit, que é o nosso limite...
O resto do codigo é bem simples, só um ponteiro simples e alocação de memoria (eu não coloquei check de memoria do ponteiro, mas é sempre bom colocar... ;)
Mais uma coisa, num usa funções que não são padrões ANSI não (itoa)... É um habito muito ruim, faz os codigos menos portaveis. ;)
Espero ter explicado bem,
Qualquer coisa posta denovo,
[]'s
Enzo