C言語で書いてみました

過去の情報処理技術者試験の出題をもとにして、Cのソースを起こしてみました。

■ 16 ビットの加算処理(平成16年春期午後問1)

#include <stdio.h>

/* 基本情報 平成16年春期午後問1 */
/* 16 ビットの加算処理 */
void print_bit(int *b)
{
    int i;
    for (i = 15; i >= 0; i--)
        printf("%d", *(b+i));
    putchar('\n');
}

int main()
{
    int x[16] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
    int y[16] = { 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 };
    int s[16], sw = 0, i;
    for (i = 0; i < 16; i++) {
        if (sw == 0) {
            s[i] = x[i] ^ y[i];
            sw = x[i] && y[i];
        } else {
            s[i] = !(x[i] ^ y[i]);
            sw = x[i] || y[i];
        }
    }
    putchar(' '); print_bit(x);
    putchar('+'); print_bit(y);
    putchar('='); print_bit(s);
    return 0;
}