#include <stdio.h>

/* 半加算器 */
/* a, b : 入力 s : 和 c : 桁上げ */
void half_adder(int a, int b, int *s, int *c)
{
  *s = a ^ b;
  *c = a & b;
  
  printf("半加算器の真理値表 : a = %d b = %d s = %d c = %d\n", a, b, *s, *c);
}

/* 全加算器 */
/* a, b : 入力 x : 下位から桁上げ s : 和 c: 桁上げ */
void full_adder(int a, int b, int x, int *s, int *c)
{
  int s1, c1, s2, c2;

  half_adder(a, b, &s1, &c1);
  half_adder(s1, x, &s2, &c2);
  *c = c1 | c2;
  *s = s2;

  printf("全加算器の真理値表 : a = %d b = %d x = %d s = %d c = %d\n\n", a, b, x, *s, *c);
}

int main(void)
{
  int a, b, x, s, c;
  
  for (x = 0; x <= 1; x++)
    for (b = 0; b <= 1; b++)
      for (a = 0; a <= 1; a++) {
        full_adder(a, b, x, &s, &c);
      }
  
  return 0;
}