#include // suma a doua numere, calculata bit cu bit, cu transport unsigned sumbits(unsigned a, unsigned b) { unsigned r = 0, mask = 1, cy = 0; do { // a & mask, b & mask, cy : bitii si transportul pe pozitia curenta r |= (a & mask) ^ (b & mask) ^ cy; // suma cu sau exclusiv cy = ((a & mask) & (b & mask)) | ((a & mask) & cy) | ((b & mask) & cy); // transport daca cel putin 2 din biti sunt 1 cy <<= 1; // pune transportul pe pozitia care trebuie mask <<= 1; // deplaseaza masca cu o pozitie } while (mask); // cat timp masca e nenula = pana bitul dispare prin stanga return r; } int main(void) { printf("%u\n", sumbits(19, 23)); return 0; }