質問: 【初心者から質問】 2進数の減算について 学校で「アセンブラ言語」について学び始めました。 「2進数の減算」が分かりません。 ・減算は負の数の加算でおこなう。 ・負の数は2の補数であらわす。 ・補数を導き出すには「ビット反転」と「+1」する。 この3つのルールのことは何となくわかります。 では、 0110 1001 -0010 1100 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ の計算の仕方を教えていただきたいです。 0110 1001 -0010 1100 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1101 0011 (ビット反転) +1101 0100 (+1する) ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 自分でやってみましたが、この先がわかりません。 (つまり負の数を加算する部分が分からないです) この先の答えと、計算方法を教えてください。 よろしくおねがいします。
回答: アセンブラに限らずコンピューターでの減算処理の内容ですね? 結論だけ先に書きますと、 01101001 (十進数だと105) -00101100 (十進数だと44) ------------------ ↓ 01101001 +11010100 (マイナス部分を反転して+1) ------------------ ↓ =12111101 (上下を足してみる) ↓ =00111101 (2進数なので2は上の位に+1する。十進数では61) となります。 原理自体は十進数の計算方法と変わりません。単に2で次の位に移動するだけです。 44556677 +23456789 ------------------ 上記の場合は各位を足した際に10を超えたら次の位に移動させますよね。二進数ではそれが2になるだけです。 そもそも一番大事なことは、「コンピューターは覚えられないことは忘れる」という特性を応用しているということですね。 その部分を押さえていれば授業の理解はぐっと早くなるかと思います。