Carry Flag in 8-bit Addition

Code

#include <stdio.h>
#include <stdint.h>

void add_with_carry(uint8_t a, uint8_t b, uint8_t* result, uint8_t* carry) {
    // Your logic here
    // int i = 0;
    // *result &= 0U; 
    // while(i<8) {
    //     if ( ( ( 1U << i ) & a ) == 1U && ( ( 1U << i ) & b ) == 1U ) {
    //         // 1 + 1 = 10 => result: 10 + 1 (carry) = 1 | carry: 1
    //         //            => result: 10 + 0 (carry) = 0 | carry: 1
    //         *result = *result | ( *carry << i );
    //         *carry = 1;
    //     } else if (( ( 1U << i ) & a ) == 1U || ( ( 1U << i ) & b ) == 1U) {
    //         // 1 + 0 = 1 => result = 1 + 1 (carry) = 0 | carry: 1
    //         //           => result = 1 + 0 (carry) = 1 | carry: 0
    //         *result = *result | ( (~( *carry )) << i );
    //         *carry = ~(*carry);
    //     } else {
    //         // 0 + 0 = 0 => result = 0 + 1 (carry) = 1 | carry: 0
    //         //           => result = 0 + 0 (carry) = 0 | carry: 0
    //         *result = *result | ( *carry << i );
    //         *carry = 0;
    //     }
    //     ++i;
    // }

    *result = a + b;
    if (b > (0xFF - a)) *carry = 1;
    else *carry = 0;
}

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

 

 

 

Upvote
Downvote
Loading...

Input

100 50

Expected Output

150 0