プログラムで加算器を作るって面白い発想ですね。
> 「2つの2進数の差を求めるプログラム」が作成できません。
a - b というのは a + (bの2の補数) になります。
(bの2の補数)は、(bの1の補数)+ 1 です。
(bの1の補数)は、bの各ビットの1と0を反転したものになります。
ですから、最初に(bの1の補数)を計算して、次にそこから(bの2の補数)を計算します。
その結果とaを加算すればaとbの差を求めることができます。
(bの1の補数)を求めるために、まずnot関数
int not(int M)
が必要になります。動作は引数で1が与えられたら0を返し、0が与えられたら1を返します。
これを使用して(bの1の補数)であるpを求めます。
p0 = not(b0)
略
p7 = not(b7)
次にpを使って(bの2の補数)であるqを求めます。
q = p + 1
ですから既にある全加算器full_adderを使用して求めることができます。
full_adder(p0, 1, 0, &q0, &c0);
full_adder(p1, 0, c0, &q1, &c1);
略
full_adder(p7, 0, c6, &q7, &c7);
(bの2の補数)であるqが求められたわけですから最初に書いたとおりaにqを加算すればaとbの差が求まります。
a - b = a + q
これも全加算器full_adderを使用して求めることができますよね。
お礼
丁寧な回答ありがとうございます。 なんか出来そうな気がするので組んでみます。 本当にありがとうございます