#include <stdio.h>
#include <stdint.h>
#define MAX_U8 255
void add_with_carry(uint8_t a, uint8_t b, uint8_t* result, uint8_t* carry) {
uint8_t i = 0, bit_carry = 0, bit_result = 0;
while(i<8)
{
if(((a & b) &1))
{ //both are 1 on first bit
if(bit_carry == 1)
{
bit_result = 1;
}
else
{
bit_result = 0;
}
bit_carry = 1;
}
else if((a|b) &1)
{ //one is 1 on first bit
if(bit_carry == 1)
{
bit_result = 0;
}
else
{
bit_result = 1;
}
}
else
{ //both are 0 on the first bit
bit_result = bit_carry;
bit_carry = 0;
}
a>>=1;
b>>=1;
*result |= (bit_result<<i);
i++;
}
*carry = bit_carry;
}
int main() {
uint8_t a, b, result, carry;
scanf("%hhu %hhu", &a, &b);
add_with_carry(a, b, &result, &carry);
printf("%u ", result);
printf("%u", carry);
return 0;
}
Input
100 50
Expected Output
150 0