|
![]() |
||
Ajuda em C++, convertendo numero binario em decimal..
|
||
. Nós temos 759.307 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) | |
|
Novo Membro
|
Ae galera ,
tô passando sufoco pra fazer um código fonte que calcule a conversão de um numero binário de 8 bits para decimal. Além do valor numérico o programa, quando executado, deve retornar o numero por extenso! Por exemplo: Entre com um nro em binario (até 8 bits): / /solicita ao usuário a entrada 11111111 Resultado: //saída do programa 255 (duzentos e cinquenta e cinco) eu jah fiz uma parte aqui , mas tá incompleto e no minimo errado ops: Citação:
__________________
|Athlon XP 1700+@2255MHz(2800+ )|K7VTA3 v5.0 8)|512DDR400|INNO 3D FX5200 128Mb|PixelViewTV+FM|Cirrus 56K|LG 24x10x40|ADSL*1,5Mb*|DVD LG 16x|200Gb
|
|
|
|
|
|
|
#2 (permalink) |
|
Super Participante
Registrado em: Dec 2001
Mensagens: 937
Reputação: 23
![]() |
Da uma olhada(se tiver usando o linux tira o conio.h eo clrscr()):
Código:
__________________
Linux User:#326216 Intel I7 - 920 - 6G DDR3 Tripple Channel @1600 - Geforce 285 1G. Programador ADVPL(Fazer o que é o que ta pagando as contas no momento...) |
|
|
|
|
|
#3 (permalink) |
|
Membro Senior
Registrado em: Apr 2003
Localização: Dpto. de Informática
Mensagens: 219
Reputação: 19
![]() |
Código:
|
|
|
|
|
|
#4 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Já posto minha versão em C++. Só tô resolvendo um pequeno grande problema que eu tô tendo aqui :P
|
|
|
|
|
|
#5 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Código:
|
|
|
|
|
|
#6 (permalink) | ||
|
Novo Membro
|
Citação:
Citação:
__________________
|Athlon XP 1700+@2255MHz(2800+ )|K7VTA3 v5.0 8)|512DDR400|INNO 3D FX5200 128Mb|PixelViewTV+FM|Cirrus 56K|LG 24x10x40|ADSL*1,5Mb*|DVD LG 16x|200Gb
|
||
|
|
|
|
|
#7 (permalink) |
|
Novo Membro
|
kao00 , o seu nem chega a compilar aqui :roll:
ops: (linux e win)
__________________
|Athlon XP 1700+@2255MHz(2800+ )|K7VTA3 v5.0 8)|512DDR400|INNO 3D FX5200 128Mb|PixelViewTV+FM|Cirrus 56K|LG 24x10x40|ADSL*1,5Mb*|DVD LG 16x|200Gb
|
|
|
|
|
|
#8 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Aqui compilou blz. Tem como vc colocar os erros que o compilador mostra aqui?
|
|
|
|
|
|
#9 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
De primeira eu tava usando o Microsoft Visual C++.NET pra compilar e não deu erro nenhum, mas como vc falou que aí não compilou, decidi tentar compilar ele no Dev-C++ e tava dando um erro na função pow() falando que ela não pode ter inteiros como parâmetros. Fiz umas pequenas mudanças e daí compilou. Vê se compila aí tb!
Código:
|
|
|
|
|
|
#10 (permalink) |
|
Membro Senior
Registrado em: Apr 2003
Localização: Rio de Janeiro
Mensagens: 343
Reputação: 21
![]() ![]() |
Não é mais fácil usando 'bitwise operators' não?
Código:
Código:
|
|
|
|
|
|
#11 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Cara, eu não entendi nada do seu código, mas achei muito perfeito! Tem como vc explicar parte por parte?
|
|
|
|
|
|
#12 (permalink) |
|
Membro Senior
Registrado em: Apr 2003
Localização: Rio de Janeiro
Mensagens: 343
Reputação: 21
![]() ![]() |
Bem, hehe, rolou um pouco de malandragem no código porque eu não 'converti' o número. Eu traduzi a string dada pelo usuário para um número binário de fato, guardei numa variável 'n' e depois retornei o valor da mesma usando o printf, já que o C vai retornar um valor decimal mesmo (a não ser que eu usasse %x para retornar em hexadecimal)!!!!
![]() O algoritmo, claro, é aquele while. Ele vai de caractere em caractere do segundo argumento testando: 1) Se é 0 ou 1 2) Se o loop ultrapassou 32 "ciclos", pois o tamanho do int numa máquina de 32 bits é....32 bits hehehe. Se o usuário fornecer mais do que 32 caracteres, o valor será truncado exatamente no trigésimo segundo. Então, o código "converte" até o limite da máquina! Se o caractere detectado foi '0' o programa simplesmente adiciona um 0 à direita. Código:
"Liga" o bit usando '^' Código:
Código:
Código:
Claro que não rolou nenhum conversão, tipo multiplicando as casas binárias por 2 e somando os valores. Por que eu não fiz isso? Primeiro: teria que chamar outras funções para 'ajudar' na conversão, como strlen(), e toda chamada de função é "cara" para o código. Segundo, aritmética com bitwise (<<, >>, ^, &, |) é muito mais rápida!! |
|
|
|
|
|
#13 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Interessante demais, mas ainda confuso. Eu tô lendo aqui no meu livro de C sobre bitwise operators mas tá mais confuso ainda do que sua explicação. Vc sabe de algum site onde explicam isso bem fácil? Pode ser em inglês tb. Valeu!
|
|
|
|
|
|
#14 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Mais uma coisa: teria como vc modificar o seu código e usar uma string definida no programa já, só pra não ter aquelas coisas de argv pra ficar mais fácil de eu entender. Tentei fazer aqui mas nem tô conseguindo. Obrigado.
|
|
|
|
|
|
#15 (permalink) |
|
Membro Senior
Registrado em: Apr 2003
Localização: Rio de Janeiro
Mensagens: 343
Reputação: 21
![]() ![]() |
Cara, tinha feito um texto ENORME explicando os operadores "bitwise". O problema é que eu fiquei tanto tempo digitando que parece que minha conexão "expirou" e perdi tudo, fiquei **** e fui tomar um banho para esfriar a cabeça...
Olha, eu recomendo você pegar no eMule os livros: "The C Language (ANSI C)" do Kernighan e Ritchie "Practical C Programming" da editora O'Reilly Aqui está o código "light": Código:
|
|
|
|
|
|
#16 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Pow, então depois que vc esfriar a cabeça, não deixa de escrever o textão não :P
Obrigado pelo código. Vou dar uma estudada nele e ver se eu pego a idéia da coisa. Esse livro que vc falou eu tenho, o The C Programming Language (Second Edition). Achei ele no lixo de uma escola, acredita? Brigão aí! |
|
|
|
|
|
#17 (permalink) |
|
Novo Membro
|
ae ta ficando muito bom , mas nao esqueçaum que ele deve retornar o numero por extenso tambem :roll: :roll: pode ser até 255 , nada mais que isso :lol:
pulsar achei sei codigo muito louco , mas d+!!! voce ta fazendo curso superior ou aprendeu isso em cursinho mesmo? :P sds ,
__________________
|Athlon XP 1700+@2255MHz(2800+ )|K7VTA3 v5.0 8)|512DDR400|INNO 3D FX5200 128Mb|PixelViewTV+FM|Cirrus 56K|LG 24x10x40|ADSL*1,5Mb*|DVD LG 16x|200Gb
|
|
|
|
|
|
#18 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Ahahaha, aí vc já ta querendo montar, Ricardo. Tenta fazer vc essa parte e pergunta pra gente se vc tiver tendo algum problema. Vc que tem que fazer seu homework! :wink:
|
|
|
|
|
|
#19 (permalink) | |
|
Membro Senior
Registrado em: Apr 2003
Localização: Dpto. de Informática
Mensagens: 219
Reputação: 19
![]() |
[quote="Ricardo Arnoud"]dá erro durante a execução(linux):
Citação:
Substitua o comando System("PAUSE") por qualquer função que permita manter a consola visível. |
|
|
|
|
|
|
#20 (permalink) |
|
Membro Senior
Registrado em: Jan 2004
Localização: Londrina - PR
Mensagens: 352
Reputação: 0
![]() |
Deixa eu ver se eu entendi direito. Vamos usar o número 1010 como exemplo:
O programa vai começar achando o número 1 da esquerda. O 0 que está na variável n vai ser transformado em 1 e um zero vai ser adicionado à direita do 1 na variável n. Por enquanto a variável n é igual a 10. Daí o programa acha o outro um, e acontece a mesma coisa, e ao final a variável n é igual a 1010. É mais ou menos isso? A única coisa que eu ainda não consegui entender foi aquele n >>= 1 depois do loop... |
|
|
|
![]() |
| Opções do Tópico | |
|
|