Passar um binário para vetor [RESOLVIDO]

1. Passar um binário para vetor [RESOLVIDO]

BrunoPeinado
peinado

(usa Ubuntu)

Enviado em 08/06/2010 - 17:53h

Tenho o seguinte código, ele simplesmente faz com que eu escreva um número em decimal e seja convertido em binário, até aí legal.

Mas eu não sei como faço pra pegar o binário e jogar em um vetor.
Tipo, eu tenho int vetor[32]
Daí cada posição do meu vetor seja "0" ou "1"
Como faço isso ?




#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

int main(int argc, char* argv[])
{
int a;
char b[10];

printf("Digite um numero: ");
scanf("%d",&a);

itoa(a,b,2); //Converte para base 2

printf("\nO numero %d em binario e: %s",a,b);
printf("\%s",b[1]);

getch();
return 0;
}


  


2. Re: Passar um binário para vetor [RESOLVIDO]

Enzo de Brito Ferber
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



3. Re: Passar um binário para vetor [RESOLVIDO]

Enzo de Brito Ferber
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



4. Re: Passar um binário para vetor [RESOLVIDO]

BrunoPeinado
peinado

(usa Ubuntu)

Enviado em 13/06/2010 - 18:16h

eu não sou acostumado com isso: *dec_bin ( int dec )


Diz um while bem basicusão:
while(numero!=0)
{
i++
vetor[i] = numero %2;
numero = numero /2;
}

Bem simples assim, mas terei problemas com números negativos, dai temq ue tratar isso.

Vocês são muitos evoluidos comparados com o C que eu sei.
Vou estudar o codigo de voces com ajuda de livos, rrsrsrs.
Vlw ae pessoa !






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts