#include /* * full adder: inputs A, B, Cin; outputs Sum and Cout */ void FullAdder (int A, int B, int Cin, int *Sum, int *Cout) { *Sum = (A ^ B) ^ Cin; *Cout = (A & B) | (A & Cin) | (B & Cin); return; } /* * 4-bit binary adder: inputs A, B, Cin; outputs Sum and Cout */ void FourBitAdder (int A[4], int B[4], int Cin, int Sum[4], int *Cout) { int InternalCarry[5], i; InternalCarry[0]=Cin; for (i=0; i<=3; ++i) FullAdder (A[i], B[i], InternalCarry[i], &Sum[i], &InternalCarry[i+1]); *Cout=InternalCarry[4]; return; } /* * test 4-bit adder for case 5 + 3, with Cin 0 or 1 */ int main() { int A[4] = {1, 0, 1, 0}, B[4]={1, 1, 0, 0}, Cin, Sum[4], Cout; for (Cin=0; Cin<=1; ++Cin) { FourBitAdder (A, B, Cin, Sum, &Cout); printf ("A=%d%d%d%d\tB=%d%d%d%d\tCin=%d\tSum=%d%d%d%d\tCout=%d\n", A[3], A[2], A[1], A[0], B[3], B[2], B[1], B[0], Cin, Sum[3], Sum[2], Sum[1], Sum[0], Cout); } return 0; }