Ho modificato il codice perchè rileggendo bene il testo dell'esercizio la somma deve essere fatta solo sul bit meno significativo di A B e C e mettere il risultato nell'intero puntato da out.
Il riporto va nella posizione 1 di Cin.
La funzione fullAdder devo poi usarla in wordAdder per fare la somma tra X e Y e memorizza nel bit meno significativo dell’intero puntato da out l’ultimo carry bit calcolato. Quindi dovrei fare un ciclo per sommare ogni bit spostandomi nell'array. Ma come lo imposto?
#include <stdio.h>
#include <stdlib.h>
void fullAdder( int A, int B, int Cin, int *out);
int wordAdder( int X, int Y, int *out);
int mult(int X, int Y);
void dec2bin(int data, int bitSeq[32]);
void bin2dec( int *data, int bitSeq[32]);
int A, B, Cin, ris;
int a[32], b[32], cin[32];
int out = 0;
int main(){
fullAdder(4,2,0,0);
getchar();
system("npause");
return 0;
}
void fullAdder( int A, int B, int Cin, int *out){
int i,nA,j,nB;
if (A<0){
nA=abs(A);
dec2bin(nA,a);
for (j=0;j<32;j++){
a[j]=~a[j];
}}
else{
dec2bin(A,a);}
if (B<0){
nB=abs(B);
dec2bin(nB,B);
for (j=0;j<32;j++){
b[j]=~b[j];
}}
else{
dec2bin(B,b);}
dec2bin(Cin, cin);
ris= (a[0]^b[0])^cin[0];
if (ris=10){
(*out)=0;
cin[1]=1;}
if (ris=11){
(*out)=1;
cin[1]=1;}
}
int wordAdder( int X, int Y, int *out){
fullAdder(X,Y,0,0);
}
int mult(int X, int Y){
}
void dec2bin(int data, int bitSeq[32]){
//indici dei for
int i=0;
int j=0;
//variabile che contiene il resto
int r=0;
//scrive il numero in decimale
printf("\n IL NUMERO %u",data );
printf(" IN BINARIO : ");
//controlla il resto della divisione per 2 e associa il valore
//corrispondente
for(i=0;i<32;i++){
r=data%2;
if (r==0)
bitSeq[i]=0;
else
bitSeq[i]=1;
data=data/2;
}
/*scrive il numero in binario
for(j=31;j>-1;j--)
printf("%d",bitSeq[j]);*/
}
void bin2dec( int *data, int bitSeq[32]){
//indice del for
int j=0;
//scrive il numero in binario
printf("\n IL NUMERO BINARIO: ");
for(j=0;j<32;j++) {
printf("%d",bitSeq[j]);}
/*legge l'elemento dall'array e lo moltiplica per 2^indice
for(j = 0; j < 32; j++){
(*data) |= bitSeq[j] << (32 - (j+1));}*/
}