Decimal para binário [RESOLVIDO]

1. Decimal para binário [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 18/08/2015 - 23:22h

Pessoal estou com problema neste código que converte decimal em binário:


#include<stdio.h>

int main()
{
char x;
int d,y;

printf("Entre com numero inteiro "); scanf("%d",&y);

d = y;

while(y > 0)
{
if(y % 2 == 0)
x = '0' + x;
else
x = '1' + x;

y = y / 2;
}

printf(" A representação binária de %d é %c ", d, x);

return 0;
}


a saída não aponta erro mas não consigo saída


A representação binária de 2 é &#9618; root@hotpc:/home/brainiac/C_programas# ./decbin.x
Entre com numero inteiro 3
A representação binária de 3 é root@hotpc:/home/brainiac/C_programas# ./decbin.x
Entre com numero inteiro 4
A representação binária de 4 é H root@hotpc:/home/brainiac/C_programas#



  


2. MELHOR RESPOSTA

Ednux
ednux

(usa Arch Linux)

Enviado em 19/08/2015 - 11:18h

Você pode usar bitwise, afinal você está trabalhando com C.


#include <stdio.h>
#include <stdlib.h>

void binario(int a);

int main(int argc, char **argv)
{
if (argc < 2) {
printf("Uso: número decimal\n");
return 0;
}

binario((int) atoi(argv[1]) ); // String para decimal

return 0;
}

void binario(int a)
{
char bytes[16] = {0};
int i = 0;

for (i = 0;i < 16; i++) {
bytes[15 - i] = (a >> i) & 1;
}

for (i = 0;i < 16; i++) {
printf("%i ", bytes[i]);
if (i + 1 < 16 && !((i+1) % 4))
printf("- ");
}
printf("\n");
}



Desse modo você não converte um número propriamente dito, mas exibe os bits ativos em cada número.
Acredito que esse seja o seu objetivo, exibir os números.
Mas se você quiser pode utilizar o seguinte:
Exemplo: 40
40 / 2 = 20 => 0 //Resto é 0
20 / 2 = 10 => 0 //Resto é 0
10 / 2 = 5 => 0 //Resto é 0
5 / 2 = 2 => 1 //Resto é 1
2 / 2 = 1 => 0 //Resto é 0
Sobrou 1 => 1 // Esse aqui também conta.
Pegue todos os restos de baixo para cima, assim você tem 101000
O último 1 que sobrou, também conta.

3. Re: Decimal para binário [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/08/2015 - 03:08h

Você não pode fazer isso com strings em C.
O que melhor se aproxima é calcular o logaritmo de base 2 do número dado e criar uma string com o tamanho do logaritmo.
Depois você coloca os zeros e uns posição a posição da string.

Por exemplo 5:

Logaritmo de 5 base 2 é 2,... dois e uns quebrados, arredonda dá 3.
Ora, 5 em binário, usando o algoritmo de divisão e resto, dá 101, três posições.
Então:

char numero_binario[3];  // criacao da string

numero_binario[0] = '1'; //atribuicao dos digitos binarios a ser feita em loop for
numero_binario[1] = '0';
numero_binario[2] = '1';
numero_binario[3] = '\0';


Mas fazendo isso dentro do loop.
A cada divisão, vai uma atribuição de numero_binario[0] = ...;

Falta você pesquisar a função de logaritmos.
Não se esqueça de colocar #include <math.h> e colocar a opção -lm na linha de compilação.

--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


4. Re: Decimal para binário

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/08/2015 - 06:41h

listeiro_037 escreveu:

Por exemplo 5:

Logaritmo de 5 base 2 é 2,... dois e uns quebrados, arredonda dá 3.
Ora, 5 em binário, usando o algoritmo de divisão e resto, dá 101, três posições.
Então:

char numero_binario[3];  // criacao da string

numero_binario[0] = '1'; //atribuicao dos digitos binarios a ser feita em loop for
numero_binario[1] = '0';
numero_binario[2] = '1';
numero_binario[3] = '\0';


Você falou uma coisa, e fez outra. No exemplo acima, você declarou uma string de três elementos e usou quatro elementos. Isso pode vir a ser bem problemático. Além disso, se você não conhecer o número de antemão, terá de alocar um array dinamicamente, o que é suportado no C99 e C11,, mas não no C90 nem no C++,

Além disso, calcular logaritmo -- ou outras operações de ponto flutuante, incluindo o arredondamento para cima -- é meio caro computacionalmente. Para inteiros pequenos, é capaz de a conversão tradicional valer mais a pena.

E como é a conversão tradicional? Já se discutiu isso aqui, e eu até postei no meu blog a respeito de uma conversão para qualquer base. Veja http://unixntools.blogspot.com.br/2013/10/tunel-do-tempo-funcao-itoa.html.

Para conversão exclusivamente para binário, é óbvio que muitas coisas do algoritmo acima podem ser otimizadas. Por exemplo, o valor de rem pode ser obtido simplesmente fazendo rem=abs_n&1, e o de quot com quot=abs_n>>1.


5. Re: Decimal para binário [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 19/08/2015 - 11:28h

Muito obrigado pessoal,

Se não der tempo de retornar hoje volto amanhã vou analisar todas as dicas com cuidado


Obrigado a todos







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts