NaaN日記

やったこと、覚えたことを発信する場

ビット演算子を使って足し算がしたい(C)

授業で半加算器とか全加算器を学んだ結果、
C言語でビット演算やりたい!」
となりました。
10進数を2つ入力すると、足した数が出力されます。多分。

#include <stdio.h>

int and (int a, int b) {
    return a&b;
}

int xor (int a, int b) {
    return a^b;
}

int calculate (int a, int b) {
    int c = and(a, b) << 1;
    int s = xor(a, b);
    int s3;
    while (c != 0) {
        s3 = xor(s, c);
        c = and(s, c) << 1;
        s = s3;
    }
    return s;
}

int main (void) {
    int a, b, result;
    printf("int a:"); scanf("%d", &a);
    printf("int b:"); scanf("%d", &b);
    result = calculate(a, b);
    printf("%d+%d=%d\n", a, b, result);
    return 0;
}

こんな感じ。

amakuchi@hoge:~$ ./a.out
int a:127
int b:255
127+255=382
amakuchi@hoge:~$ ./a.out
int a:123
int b:-43
123+-43=80
amakuchi@hoge:~$ ./a.out
int a:-23
int b:-111
-23+-111=-134

【追記】
calculateに無駄があったので削除と編集。
短く書かれた記事を発見。
www.kaoriya.net