Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
matheus william

C Problema na hora de somar os números binários

Recommended Posts

eu estou com o seguinte problema: somar os números binários! 

a atividade em si é: receber dois números decimais, convertê-los para binário e depois fazer a soma binaria dos números convertidos.

eu já fiz o código mas esta somando errado, quem puder me ajudar eu agradeço!

OBS.: O PROGRAMA TEM QUE ESTA EM C.

#include <stdio.h>
#define na 16
int main() {
 int n,n1,r[na],r1[na],i,somav[na],vaium=0,invert[na],np=1;

 /*Lê o número*/
 printf("\n Digite o primeiro numero: ");
 scanf("%d", &n);
 /* Utiliza um número de 16 bits como base para a conversão.*/
 for(i = na-1; i >= 0; i--) {
    r[i] = (n >> i) & 1;
    /*Por meio do "e" lógico ele compara se o valor na posição mais à direita é 1 ou 0 e imprime na tela até reproduzir o número binário.*/
    if(r[i] & 1)
        printf("1",r[i]);
     else
        printf("0",r[i]);

 }
 printf("\n Digite o segundo numero: ");
 scanf("%d", &n1);
 for(i = na-1; i >= 0; i--) {
    r1[i] = (n1 >> i) & 1;
    if(r1[i] & 1)
        printf("1",r1[i]);
     else
        printf("0",r1[i]);

 }
/*for (i=na-1;i>=0;i--)
    vaium[i]=0;*/
if(n<0) {
   for(i=na-1;i>=0;i--){
        if(r[i]==1)
            invert[i]=0;
        else
            if(r[i]==0)
                invert[i]=1;
    }
    for (i=na-1;i>=0;i--)
        r[i]=invert[i]+np+vaium;
        if(r[i]==2){
            r[i]=0;
            vaium=1;
        }
}
else
    if(n1<0){
        for(i=na-1;i>=0;i--){
        if(r1[i]==1)
            invert[i]=0;
        else
            if(r1[i]==0)
                invert[i]=1;
    }
    for (i=na-1;i>=0;i--)
        r1[i]=invert[i]+np+vaium;
        if(r1[i]==2){
            r1[i]=0;
             vaium=1;
        }
}

for(i=na-1;i>=0;i--){
    somav[i]=r[i]+r1[i]+vaium;
    if((somav[i]==2) || (somav[i]==3)){
        somav[i]=0;
        vaium=1;
    }
}
printf("\n Soma dos numeros binarios:");
for (i=na-1;i>=0;i--)
    printf("%d",somav[i]%2);
 return 0;
}

 

Editado por matheus william
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@matheus william    você não está zerando o vaium ,  então seu código com algumas modificações ficaria assim  :

#include <stdio.h>
#include <windows.h>
#define na 16
int main(){
    int n,n1,r[na],r1[na],i,j,t,somav[na],vaium=0,invert[na],np=1;
    printf("Digite O Primeiro Numero: ");
    scanf("%d", &n);
    /* Utiliza um número de 16 bits como base para a conversão.*/
    for(i = na-1; i >= 0; i--) {
        r[i] = (n >> i) & 1;
        /*Por meio do "e" lógico ele compara se o valor na posição mais à */
        /* direita é 1 ou 0 e imprime na tela até reproduzir o número binário.*/
        if(r[i] & 1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("Digite O Segundo Numero: ");
    scanf("%d", &n1);
    n1=abs(n1);
    for(i = na-1; i >= 0; i--) {
        r1[i] = (n1 >> i) & 1;
        if(r1[i] & 1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("R   R1  Soma       vaium\n\n");
    for(i=0;i<na;i++){
        somav[i]=r[i]+r1[i]+vaium;
        if(somav[i]==3 || somav[i]==1)t=1;else t=0;
        printf("%d + %d => %d  <--->  vaium = %d\n",r[i],r1[i],t,vaium);
        if((somav[i]==2)){
            somav[i]=0;
            vaium=1;
        }
        else
            if(somav[i]==3){
                somav[i]=1;
                vaium=1;
            }
            else
                vaium=0;
        Sleep(500);
    }
    printf("\n\nSoma Dos Numeros Binarios :  ");
    for (i=na-1;i>=0;i--)
        printf("%d",somav[i]%2);
    printf("\n\n");
    return 0;
}

 

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@matheus william   se o número for negativo você precisa passá-lo para positivo e para isso você pode usar a função abs   :

n = abs(n);

e assim fazer os cálculos normalmente  .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×