#include <bits/stdc++.h>
using namespace std;
// macro that defines the size of an integer
// assuming 2 byte storage for integer
#define SIZE 16
// Function to add x and y in binary
int* add(int x, int y)
{
int carry = 0;
int n = SIZE;
// create a array to store binary sum
int* arr = (int*)malloc(n);
for (int i = 0; i < n; i++)
{
// if x is 1
if (x & (1 << i))
{
// if y is 1
if (y & (1 << i)) // if both x and y are 1
{
if (carry)
arr[n - i - 1] = 1; // carry = 1
else
arr[n - i - 1] = 0, carry = 1;
}
else // x is 1, y is 0
{
if (carry)
arr[n - i - 1] = 0; // carry = 1
else
arr[n - i - 1] = 1; // carry = 0
}
}
// if x is 0
else
{
if (y & (1 << i)) // x is 0, y is 1
{
if (carry)
arr[n - i - 1] = 0; // carry = 1
else
arr[n - i - 1] = 1; // carry = 0
}
else // both x and y are 0
{
if (carry == 1)
arr[n - i - 1] = 1, carry = 0;
else
arr[n - i - 1] = 0; // carry = 0
}
}
}
return arr;
}
int main()
{
int x = 12731, y = 38023;
cout << "x (" << x << ") in binary is " << bitset<16>(x) << endl;
cout << "y (" << y << ") in binary is " << bitset<16>(y) << endl;
int* arr = add(x, y);
cout << "\nx + y is ";
for (unsigned i = 0; i < SIZE; i++)
printf("%d", arr[i]);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBtYWNybyB0aGF0IGRlZmluZXMgdGhlIHNpemUgb2YgYW4gaW50ZWdlcgovLyBhc3N1bWluZyAyIGJ5dGUgc3RvcmFnZSBmb3IgaW50ZWdlcgojZGVmaW5lIFNJWkUgMTYKCi8vIEZ1bmN0aW9uIHRvIGFkZCB4IGFuZCB5IGluIGJpbmFyeQppbnQqIGFkZChpbnQgeCwgaW50IHkpCnsKCWludCBjYXJyeSA9IDA7CglpbnQgbiA9IFNJWkU7CgoJLy8gY3JlYXRlIGEgYXJyYXkgdG8gc3RvcmUgYmluYXJ5IHN1bQoJaW50KiBhcnIgPSAoaW50KiltYWxsb2Mobik7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJLy8gaWYgeCBpcyAxCgkJaWYgKHggJiAoMSA8PCBpKSkgCgkJewoJCQkvLyBpZiB5IGlzIDEKCQkJaWYgKHkgJiAoMSA8PCBpKSkgLy8gaWYgYm90aCB4IGFuZCB5IGFyZSAxCgkJCXsKCQkJCWlmIChjYXJyeSkKCQkJCQlhcnJbbiAtIGkgLSAxXSA9IDE7IC8vIGNhcnJ5ID0gMQoJCQkJZWxzZQoJCQkJCWFycltuIC0gaSAtIDFdID0gMCwgY2FycnkgPSAxOwoJCQl9CgkJCWVsc2UgLy8geCBpcyAxLCB5IGlzIDAKCQkJewoJCQkJaWYgKGNhcnJ5KQoJCQkJCWFycltuIC0gaSAtIDFdID0gMDsgLy8gY2FycnkgPSAxCgkJCQllbHNlCgkJCQkJYXJyW24gLSBpIC0gMV0gPSAxOyAvLyBjYXJyeSA9IDAKCQkJfQoJCX0KCQkvLyBpZiB4IGlzIDAKCQllbHNlIAoJCXsKCQkJaWYgKHkgJiAoMSA8PCBpKSkgLy8geCBpcyAwLCB5IGlzIDEKCQkJewoJCQkJaWYgKGNhcnJ5KQoJCQkJCWFycltuIC0gaSAtIDFdID0gMDsgLy8gY2FycnkgPSAxCgkJCQllbHNlCgkJCQkJYXJyW24gLSBpIC0gMV0gPSAxOyAvLyBjYXJyeSA9IDAKCQkJfQoJCQllbHNlIC8vIGJvdGggeCBhbmQgeSBhcmUgMAoJCQl7CgkJCQlpZiAoY2FycnkgPT0gMSkKCQkJCQlhcnJbbiAtIGkgLSAxXSA9IDEsIGNhcnJ5ID0gMDsKCQkJCWVsc2UKCQkJCQlhcnJbbiAtIGkgLSAxXSA9IDA7IC8vIGNhcnJ5ID0gMAoJCQl9CgkJfQoJfQoKCXJldHVybiBhcnI7Cn0KCmludCBtYWluKCkKewoJaW50IHggPSAxMjczMSwgeSA9IDM4MDIzOwoKCWNvdXQgPDwgInggKCIgPDwgeCA8PCAiKSBpbiBiaW5hcnkgaXMgIiA8PCBiaXRzZXQ8MTY+KHgpIDw8IGVuZGw7Cgljb3V0IDw8ICJ5ICgiIDw8IHkgPDwgIikgaW4gYmluYXJ5IGlzICIgPDwgYml0c2V0PDE2Pih5KSA8PCBlbmRsOwoJCglpbnQqIGFyciA9IGFkZCh4LCB5KTsKCgljb3V0IDw8ICJcbnggKyB5IGlzICI7Cglmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0laRTsgaSsrKQoJCXByaW50ZigiJWQiLCBhcnJbaV0pOwoKCXJldHVybiAwOwp9Cg==