Olá pessoal tudo bem?
Pois bem eu estou com um problema nessa atividade: receber dois números decimais(considerar números negativos), convertê-los para binário e fazer a soma binária dos números convertidos.
O meu código está dando erro na parte dos números negativos.
Quem puder me ajudar eu agradeço!
#include <stdio.h>
#define bits 15
int main (){
int valor1, /*armazena o primeiro número decimal informado pelo usuário */
valor2, /*armazena o segundo número decimal informado pelo usuário*/
vetvalor1[bits], /*armazena o primeiro número convertido para binário*/
vetvalor2[bits], /*armazena o segundo número convertido para binário*/
np[15],
i,k,t, /*contadores*/
vaium=0, /*armazena o vai um da soma dos binários*/
soma[bits]; /*armazena a soma dos binários*/
printf(" Conversão de Valores - Decimal x Binário ");
printf("\n ***************************************************** \n");
np[15]=1;
printf("\n Informe o primeiro número:");
scanf("%d", &valor1);
/* Transformando o primeiro número em binário */
if (valor1>0){ /*Verificando se o número é positivo ou negativo*/
for (i=bits; i >= 0; i--){
if (valor1 % 2 == 0)
vetvalor1[i] = 0;
else
vetvalor1[i]=1;
valor1=valor1 / 2;
} /* for */
} /*if (valor1>0)*/
else{ /*Se o número for negativo*/
for (i=bits; i >= 0; i--){
if (valor1%2==0)
vetvalor1[i]=1;
else
vetvalor1[i]=0;
valor1=valor1 / 2;
vetvalor1[i]=vetvalor1[i]+np[15]+vaium;
if(vetvalor1[i]==3 || vetvalor1[i]==1)t=1;else t=0;
if((vetvalor1[i]==2)){
vetvalor1[i]=0;
vaium=1;
}
else
if(vetvalor1[i]==3){
vetvalor1[i]=1;
vaium=1;
}
else
vaium=0;
}
}
printf("\n O primeiro número convertido para binário é: ");
for (i=0; i <= bits; i++)
printf("%d",vetvalor1[i]);
printf(" ");
printf("\n Informe o segundo número:");
scanf("%d", &valor2);
/* Transformando o segundo número em binário */
if (valor2>0){ /*Verificando se o número é positivo ou negativo*/
for (i=bits; i >= 0; i--){
if (valor2 % 2 == 0)
vetvalor2[i] = 0;
else
vetvalor2[i]=1;
valor2=valor2 / 2;
} /* for */
} /*if (valor1>0)*/
else{ /*Se o número for negativo*/
for (i=bits; i >= 0; i--){
if (valor2 % 2 == 0)
vetvalor2[i]=1;
else
vetvalor2[i]=0;
valor2=valor2 / 2;
vetvalor2[i]=vetvalor2[i]+np[15]+vaium;
if(vetvalor2[i]==3 || vetvalor2[i]==1)t=1;else t=0;
if((vetvalor2[i]==2)){
vetvalor2[i]=0;
vaium=1;
}
else
if(vetvalor2[i]==3){
vetvalor2[i]=1;
vaium=1;
}
else
vaium=0;
}
}
printf("\n O segundo número convertido para binário é: ");
for (i=0; i <= bits; i++)
printf("%d",vetvalor2[i]);
for (i=bits; i>=0; i--){
soma[i]=vetvalor1[i]+vetvalor2[i]+vaium;
if(soma[i]==3 || soma[i]==1)t=1;else t=0;
if((soma[i]==2)){
soma[i]=0;
vaium=1;
}
else
if(soma[i]==3){
soma[i]=1;
vaium=1;
}
else
vaium=0;
} /*for*/
printf("\n A soma é:");
for (i=0; i<=bits; i++)
printf("%d",soma[i]);
return 0;
}