#include bool OR(bool a, bool b) { if(a) return true; if(b) return true; return false; } bool AND(bool a, bool b) { if(a) if(b) return true; return false; } bool XOR(bool a, bool b) { if(a) { if(b) return false; return true; } if(b) return true; return false; } bool NOT(bool a) { if(a) return false; return true; } char Half_Adder(bool a, bool b) { return (XOR(a,b)<<1 | AND(a,b)); } char Full_Adder(bool a, bool b, bool c) { return (XOR(XOR(a,b),c))<<1 | (OR(OR(AND(a,b),AND(c,a)),AND(c,b))); } unsigned int RevBits ( unsigned int val ) { unsigned int ret = 0; unsigned int b = 1; while (b != 0) { ret = ( ret << 1 ) | ( val & 1 ); val >>= 1; b <<= 1; } return ret; } void main() { printf("%i\n",Full_Adder(false,false,false)); printf("%i\n",Full_Adder(false,false,true)); printf("%i\n",Full_Adder(false,true,false)); printf("%i\n",Full_Adder(false,true,true)); printf("%i\n",Full_Adder(true,false,false)); printf("%i\n",Full_Adder(true,false,true)); printf("%i\n",Full_Adder(true,true,false)); printf("%i\n",Full_Adder(true,true,true)); printf("\n\n"); //num1, num2, pos and final must be the same //number of bits unsigned int num1 = 1234567; unsigned int num2 = 7654321; unsigned int final = 0; //must be zero or //answer will be wrong unsigned int pos = 1; //must be odd number to start //temp var to store result of adder char res = 0; //must be defaulted to zero //or answer will be off by res%2 while(pos!=0) { res = Full_Adder(num1 & 1, num2 & 1, res & 1); num1 >>= 1; num2 >>= 1; final = (final<<1) | (bool)(res & 2); pos <<=1; } final = RevBits(final); printf("%i\n", final); }