fork(7) download
  1. #include<stdio.h>
  2.  
  3. typedef char bit;
  4. bit carry = 0;
  5. bit halfadd( bit A, bit B ){
  6. carry = A & B;
  7. return A ^ B;
  8. }
  9. bit fulladd( bit A, bit B ){
  10. bit xor = A ^ B;
  11. bit ret = carry ^ xor;
  12. carry = (carry & xor) | (A & B);
  13. return ret;
  14. }
  15.  
  16. void fillNum( int num, bit *array ){
  17. int i;
  18. for( i = 0; i < 32; ++ i ){
  19. array[i] = ( num >> i ) & 1;
  20. }
  21. }
  22.  
  23. int main(){
  24. bit num1[32] = {0}, num2[32] = {0};
  25. int A = 64620926, B = 1531529858;
  26. fillNum( A, num1 );
  27. fillNum( B, num2 );
  28.  
  29. int r = 0;
  30. bit tmp = halfadd( num1[0], num2[0] );
  31. putchar( tmp ? '1' : '0' );
  32. r = tmp;
  33. int i;
  34. for( i = 1; i < 32; ++i ){
  35. tmp = fulladd( num1[i], num2[i] );
  36. r += tmp << i;
  37. putchar( tmp ? '1' : '0' );
  38. }
  39. putchar( carry ? '1' : '0' );
  40. printf("\n%d\n\n%d + %d = %d", r, A, B, A+B);
  41. return 0;
  42. }
Success #stdin #stdout 0s 1788KB
stdin
Standard input is empty
stdout
000000000010101011000100111110100
1596150784

64620926 + 1531529858 = 1596150784