1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
void bitvector_add(uint32_t a, uint32_t b, uint32_t *add, uint32_t *carry);
uint32_t uint32_add(uint32_t a, uint32_t b);
void bitvector_add(uint32_t a, uint32_t b, uint32_t *add, uint32_t *carry)
{
*add=a^b;
*carry=a&b;
}
uint32_t uint32_add(uint32_t a, uint32_t b)
{
uint32_t add;
uint32_t carry;
do {
bitvector_add(a,b,&add,&carry);
a=add;
b=carry<<1;
} while (b!=0);
return a;
}
int main(void)
{
uint32_t a,b;
printf("a=");
scanf("%"SCNu32, &a);
printf("b=");
scanf("%"SCNu32, &b);
printf("a+b=%"PRIu32"\n", uint32_add(a,b));
return 0;
} |
Partager