+を使わずにAdd関数を作成する方法
下のコードが実際に足し算として機能するのか、8ビット計算で試してみた
int add(int a, int b)
{
while (b != 0)
{
int c = (a & b) << 1;
a ^= b;
b = c;
}
return a;
}
例1 44+33の場合
a= 44
b =33
1回目のループ
a = 00101100
b = 00100001
(a & b) << 1で、And判定してさらに左に1ビットシフト
00100000
c= 01000000
a^ = bでXOR判定
a = 00001101
b = 01000000
2回目のループ
a、bともに1のダブりがないので、全部0に
c = 00000000
a^ = bでXOR判定
a = 01001101 => 64+8+4+1 = 77
b = 00000000
で、この後にaが帰るから・・・確かに足し算後の値になる。
肝はcでの繰上げなんだな。
もう一こ例をば
例2 127+127の場合
01111111 => 127
01111111 => 127
c= 11111110
a = 00000000
b = 11111110
c = 00000000
a = 11111110 => 254
まじだ・・・すげえな、これ