Code:
//--- Included files ---
#include <iostream.h>
#include <conio.h>
//--- Global stuff ---
bool MemBit=0;
//--- Bit adder ---
bool BitAdd(bool Bit1, bool Bit2)
{
//Add two bits
MemBit=(Bit1 & Bit2);
return (!(Bit1 & Bit2) && (Bit1 | Bit2));
}
//--- Set specific byte function ---
void SetBit(unsigned short& TempNum, unsigned short Number)
{
unsigned short AddBit=1;
AddBit=AddBit<<Number;
TempNum=(TempNum | AddBit);
}
//--- Full adder ---
unsigned short Add(unsigned short Num1, unsigned short Num2)
{
//Variables
unsigned short CompleteNumber=0;
bool TempBit;
bool OldMemBit;
bool PassOnBit;
//Adds two 16-bit numbers using BitAdd function
TempBit=BitAdd(Num1 & 1, Num2 & 1);
if(TempBit) SetBit(CompleteNumber, 0);
PassOnBit=MemBit;
TempBit=BitAdd(Num1 & 2, Num2 & 2);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 1);
TempBit=BitAdd(Num1 & 4, Num2 & 4);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 2);
TempBit=BitAdd(Num1 & 8, Num2 & 8);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 3);
TempBit=BitAdd(Num1 & 16, Num2 & 16);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 4);
TempBit=BitAdd(Num1 & 32, Num2 & 32);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 5);
TempBit=BitAdd(Num1 & 64, Num2 & 64);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 6);
TempBit=BitAdd(Num1 & 128, Num2 & 128);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 7);
TempBit=BitAdd(Num1 & 256, Num2 & 256);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 8);
TempBit=BitAdd(Num1 & 512, Num2 & 512);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 9);
TempBit=BitAdd(Num1 & 1024, Num2 & 1024);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 10);
TempBit=BitAdd(Num1 & 2048, Num2 & 2048);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 11);
TempBit=BitAdd(Num1 & 4096, Num2 & 4096);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 12);
TempBit=BitAdd(Num1 & 8192, Num2 & 8192);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 13);
TempBit=BitAdd(Num1 & 16384, Num2 & 16384);
OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 14);
TempBit=BitAdd(Num1 & 32768, Num2 & 32768);
//OldMemBit=MemBit;
TempBit=BitAdd(TempBit, PassOnBit);
//PassOnBit=(OldMemBit | MemBit);
if(TempBit) SetBit(CompleteNumber, 15);
//Return answer
return CompleteNumber;
}
//--- Main ---
int main()
{
//Add numbers
cout << "1 plus 3 is: " << Add(1, 3) << endl;
cout << "6 plus 14 is: " << Add(6, 14) << endl;
cout << "256 plus 768 is: " << Add(256, 768) << endl;
cout << "1100 plus 11 is: " << Add(1100, 11) << endl;
cout << "65535 plus 1 is: " << Add(65535, 1);
cout << "\t(Data out of range, restarts from 0)" << endl;
cout << "65535 plus 2 is: " << Add(65535, 2) << endl;
cout << "65535 plus 9 is: " << Add(65535, 9) << endl;
//Exit
getch();
return 0;
}