1. ## need some help with binary addition.

can someone help me with binary addition? i know how it works on paper but when it comes to actually coding it, i cant seem to get it as the addition gives the result of regular addition. for example i know the following
0+0=0
1+0=1
1+1=10 , 1 is carried and 0 is placed.

now when i have 110 + 111 it gives me 221.

what i was thinking of doing is replace the numbers, for example if the last number is 0 and the last number of the second number is 1 then the output is 1. so i would use some if statements, but if doing this then i will have to use some sort of array or something which confuses me and i have no idea how to get past that problem. any suggestions of what i could do?

2. come on any suggestions? i found another method which works in part but its not totally correct someone help me find the error? here is what i have so far.

Code:
```#include <iostream>
#include <string>
using namespace std;

int main()
{
string bin1= "1";

string bin2= "0";

string bin3;

cout << "Enter the 1st binay number: ";
cin >> bin1;

cout << "Enter the 2nd binary number: ";
cin >> bin2;

bin3 = bin1 + bin2;

cout << "\nfirst number: " << bin1 <<  " Second number: " << bin2 <<  "Result: "<< bin3 <<endl;

return 0;
}```
edit: nm what i posted, i still need help to figure out the bug on here

3. first, don't bump posts, second, why are you using strings to hold your values??

One idea is to convert the binary inputs into decimal; add them; convert back to binary. If you don't know how to convert, do a search on these boards.

edit:: you could also look here for the basics of binary addition.

4. well doing all those conversions will take time and im looking for the most efficient way to do it.

5. first learn how to do it, then work on efficiency. If you say you could do it on paper, it should be a breeze to emulate it through code.

6. its isnt as easy because i cant figure out how to get 1+1=0 with a carry of 1

7. ## strtoul() & <bitset>

All the data in your computer is already in binary. So, conversion is getting done all the time. Usually it's a default conversion between decimal and binary.

This means that conversion is done ONLY during input/output. You can input one number in hex, input another in octal, add them together, and display the result in decimal. You don't have to worry about mixing bases, as long as everything is stored as regular integers.

You can use strtoul() to input a binary number, and <bitset> to display a binary number. Or, if you have a Microsoft compiler, you can use the non-standard itoa() to display binary.

If you want to do it yourself, I'd suggest that you write the code to do hex-binary conversion, because cin and cout can automatically handle hex. And, hex-binary conversions are easy... you can do them in your head!

Here's an example program I wrote a couple of years ago:

8. thanks for your suggestion and the tutorial but im still having problems, this is only a binary addition, so the user will only enter 0 and 1's which will have to be added. there shouldn't b conversion of the numbers as it will create problems, the add function should add these numbers and output the binary with no conversions made, conversion is not the point. the main point of this is efficiency, and you can achieve that by finding a way to make the program think that 1+ 1 =0 with a carry of 1. maybe i can make use of logical operators and bitwise operators so that i can get the addition to work

9. This code is a failure and will not work, but enjoy trying to get it to work, as I cannot...
Code:
```#include <stdio.h>
#include <stdlib.h>

// Allow boolean types
typedef enum
{
false,
true
} bool;

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

int main (void)
{
// Binary numbers b1 and b2 get added together
int b1 = 111, b2 = 101;
int b3;

printf ("111 + 101 = %d\n", 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;
}```

10. thanks for the compliment lol, i guess.. ive been studying C and C++on my own recently and today ive been infront of the monitor from 11am.

anyway back to the matter at hand, im getting a few errors when i try to compile your code.
Code:
```C:\Program Files\Microsoft Visual Studio\MyProjects\proj\ver3.cpp(7) : error C2059: syntax error : 'constant'
C:\Program Files\Microsoft Visual Studio\MyProjects\proj\ver3.cpp(9) : error C2143: syntax error : missing ';' before '}'
C:\Program Files\Microsoft Visual Studio\MyProjects\proj\ver3.cpp(9) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

ver3.exe - 3 error(s), 0 warning(s)```

11. > thanks for the compliment lol

I doubt that was a compliment for you - you have not shown any effort in order to solve this problem.

> anyway back to the matter at hand, im getting a few errors when i try to compile your code.

I don't think erasing that whole typedef will change anything. Try deleting it and see if that'll work

12. well if it wasnt referred to me, i take it back. sorry if i offened anyone but problems dont have only 1 solution and im trying to find 1 of the soultions which is more relevant at what im trying to achieve, and i beleive im on the right track.

13. My bad I was using C with C++ comments lol. Delete the whole typedef struct at the top, because its type is bool and there is already a type bool in C++.

This is not valid in C++:
Code:
```#include <stdio.h>
#incude <stdlib.h>```
Change that to:
Code:
`#include <iostream>`
And then change:
Code:
```// Print out binary addition
printf ("111 + 101 = %d\n", b3);```
To This:
Code:
```// Print out binary addition
cout << "111 + 101 = " << b3 << endl;```
Add this to the top of the file after the #includes:
Code:
```using std::cout;
using std::endl;```

14. Wow what a confusing mess. This would all be easier if you simply outlined the program in pseudocode, or flowchart it if you prefer. That's what I do the moment I realize I'm stuck in the logic to a solution. You'll find you'll get the solution so much quicker that way.

Here's a sample...
Code:
```Initialize variables
Int digit1, digit2    // Digits to be summed //
Int num1, num2     // User Input //
Int dsum            // sum of digit1 and digit2 //
Int carrier = 0        // Initialize the carrier to 0 //

While value exists for num1 or num2 or carrier
Strip Digit from each number
digit1 = num1 % 10
digit2 = num2 % 10
num1 = num1 / 10
num2 = num2 / 10
digit1 + digit2 + carrier = dsum
if dsum == 2
dsum = 0
carrier = 1
else if dsum == 3
dsum = 1
carrier =1
else
carrier = 0
Store dsum        // Store the final digit for later retreival //

Output stored digits```
That's off the top of my head, so I didn't bother to take time to incorporate a method of storing the digits (a simple array should suffice or an algorithm to sum it into an integer).

Oh, and PUHLEAZE tell me I didn't scan through this thread and actually see a GOTO statement. :P

15. Hey Scribbler my Linux friend lol. Yes, you did see a goto, and I should be slapped. I'm trying to do this cool pretty code code structure, and to keep the indentation to the left, I felt the only way at the time was to use the goto. I'm so sorry, I'm a failure!!!