All submissions

Carry Flag in 8-bit Addition

Code

#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;
}

Solving Approach

 

 

 

Loading...

Input

100 50

Expected Output

150 0