ビット演算子を使って足し算がしたい(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