1. Kleid-0 have you tested your program with various inputs...I just compiled it with different values for b1 and b2 and it doesn't work.

2. I modified your code a bit to receive user input, and as you can see, it does not work. Even 1+1 or 0+0;

Code:
```#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using std::cout;
using std::cin;

// Allow boolean types

// Add binary numbers and return binary
int addBinary (int b1, int b2);

int main (void)
{
bool notDone = true;
// Binary numbers b1 and b2 get added together
int b1, b2, b3;
while( notDone )
{
cout << "\n1st: ";
cin >> b1;

if( b1 == 9 ) //input 9 for exit
break;

cout << "\n2nd: ";
cin >> b2;

printf ("\n%d + %d = %d\n",b1, b2, b3);
}
return 0;
}

// Add binary numbers and return binary
int b1,     // The first binary number
int b2)     // The second binary number
{
int a;
bool carrier = false;
// Current digit step (starts at 1)
int s = 2;

// Add the numbers like decimal
a = b1 + b2;

// Next Binary digit
NBD:
// If the carrier is true, add one to the current placement
if (carrier)
{
a += 1 * (s - (s / 2));
carrier = false;
}

// If the carrier makes the postdigit a 3, we have trouble
if (a % (s / 2 + s) < s / 2)
{
a += 1 * ((s * 10) - ((s * 10) / 2));
a -= 1 * (s - (s / 2));
}

// If the addition yields a 2 * digit placement,
// remove it and set carrier binary addition to true.
if (a % s < (s / 2))
{
a -= 1 * (s - (s / 2));
carrier = true;
}

// If our digit placement is high enough, exit
if (s > a)
return a;

// Set the digit placement higher
s *= 10;

// Verify next placement (Next binary Digit)
goto NBD;
}```

3. All of this logical thinking has destroyed my thinking capacities, I'm going to wait out this problem and come back. I'll try Scribbler's approach next time lol....I thought I knew what I was doing :(

4. You might want to edit your original post with the code stating that your solution does not work.

5. I dug and dug, and dug somemore...and finally, I found it! Not the exact solution to your problem but I knew I wrote something very similar a long time ago in my first c++ class. The assignemnt was a bit different, as I think one of the specs was that the binary number can only have a max of 4 digits (ie. 1011 is good, and 11101 is not) - this should be easily changed. Also, each input has to have leading zeros; so if you want to add 1 + 10, you should input 0001 + 0010 - I really don't remember why I did it this way - maybe becasue that the only way I knew how to

anywho I run the prog on some test input just now, and it seems to be working fine, but only with the rules I described above - no error handling whatsover (Hey it was my first c++ class, and one of the first assignments )

Code:
```/*
* Author: Jakub Bomba
* Class: CS100, Prof. Bell
* Date: 09.09.2002
*/

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

/*
* Function that actually does the binary addition
* @param:	f - first binary number
*			s - second binary number
*			carry - flag for the carry
*/
int s, //second number
int * carry)
{

int result=0;

// exhaust all of the possible cases as described in the handout

if( (f == 0) && (s == 0) )
{
result = ( *carry );
*carry = 0;
}

else if( (f == 0) && (s == 1) )
{
if( *carry==0 )
result = 1;
else
{
result = 0;
*carry = 1;
}
}
else if( (f == 1) && (s == 0) )
{
if( *carry==0 )
{
result = 1;
}
else
{
result = 0;
*carry = 1;
}
}
else if( (f == 1) && (s == 1) )
{

if( *carry==0 )
{
result = 0;
*carry = 1;
}
else
{
result = 1;
*carry = 1;
}
}

return result;
}

int main(void) {

int i;          // loop counter
int carry=0;		// Initialize carry to 0 (IMPORTANT)

int n1[4];	// MSB - index 0 LSB index 3 - MSB - Most significant bit  (leftmost)
int n2[4];	// MSB - index 0 LSB index 3 - LSB - Least significant bit (rightmost)
int result[5];	// MSB - index 0 LSB index 4

char e_result[6]; // 5+null char
char e_n1[5]; // 4+null char
char e_n2[5]; // 4+null char

// get data

cout << "Enter first number: ";
cin >> e_n1;
cout << "Enter second number: ";
cin >> e_n2;

// convert from char array to int array
// It is useful to have data in int array when doing conversion into decimal
// value of a certain binary number which is not implemented in this program.

for(i = 0; i < 4; i++)
{
n1[i] = (e_n1[i]-48);
n2[i] = (e_n2[i]-48);
}

// initialize result array
for( i = 0; i < 5; i++)
result[i] = 0;

for( i = 3; i >= 0; i--) { // go from right to left (LSB to MSB)

// since LSB index for result
// is 1 more than LSB of operands

e_result[i+1] = result[i+1]+48; // For display purposes - convert to char array
}

result[0] = carry; // Add MSB of result
e_result[0] = result[0] + 48;
e_result[5] = '\0'; // Put NULL Char

cout << "   " << e_n1 << endl;
cout << "  +" << e_n2 << endl;
cout << "  -----" << endl;
cout << "  " << e_result << endl << endl;

return 0;

}```

6. thanks for another tip and the boost, i was right when i said the solution uses logical operators but i was getting myself lost in the many if statements.