論理回路シミュレータlogisimで補数

logisimで減算をやってみます。まずは補数からおさらい。

補数


1の補数

補う(おぎなう)数で、1 + x = 1となる数。2進数だとビットを反転するだけです。つまりNOT回路で”1の補数”をつくれます。

NOT回路で反転するだけで1の補数となる

ビット数が増えても全く同じで、0111の1の補数は、すべてのビットを反転させた1000になります。これもビットの数だけNOT回路を並べればよいだけです。

4bitでも同じで、NOT回路で反転させるだけ

0111 + 1000 = 1111

1の補数の性質

2進数の1の補数は、すべてのビットが1になる数のことです。単純に反転すれば求められます。

0111(元の数) + 1000(1の補数=反転した数) = 1111(すべてが1ビット)

2の補数

2の補数は、「1の補数+1」と覚えてしまえばよいです。性質としては

2進数の2の補数は、足すと桁が上がる数です。

先ほどの2進数4bitの0111で考えると、

0111(元の数) + 1001(2の補数=1の補数に+1) = 10000(桁が上がった)

元の数に2の補数を足すと桁上がりが発生します。これが2の補数です。私たちの使っているコンピューターは、この2の補数でマイナスの値を表現します。

符号付数値表現 4ビットの2の補数

以下は、4bitの符号付き、符号なし数値表現の一覧です。

例えば、1から2の補数による-1を求めるには、

  • 1は2進数で0001。
  • まずは0001を反転して1の補数である1110求めます。
  • 次に、1110に1を加えて2の補数である1111を求めます。
  • これが-1になります。

2から2の補数による-2を求めるには、

  • 2は2進数で0010。
  • まずは0010を反転して1の補数である1101求めます。
  • 次に、1101に1を加えて2の補数である1110を求めます。
  • これが-2になります。

加算

2進数の足し算は私たちが普段やっている足し算と一緒です。まずは単純な3 + 4 = 7をやってみます。

2bit 加算器

4bit 加算器

前回の記事「論理回路シミュレータlogisimで加算回路」で加算器(Full Adder)の中身を詳しく説明しています。

減算

減算(引き算)は、そのまま行わず、マイナスの値を足すという方法でやります。例えば、3 – 4 = -1 なら、3 + (-4) = -1に置き換えます。

4から2の補数による-4を求めるには、

  • 4は2進数で0100。
  • まずは0100を反転して1の補数である1011求めます。
  • 次に、1011に1を加えて2の補数である1100を求めます。
  • -4は2進数で1100になります。

3 + (-4) をやってみましょう。

符号付数値一覧で確認してもわかるように、2の補数表現を使いマイナスの値を足すことで、-1(2進数で1111)が求められました。

2ビット加減算器(あっているはず)

加減算器のポイント

加減算器は、XOR回路で、1の補数を作っているところです。

加算のときは、0と比較するので、入力した値がそのまま出力されます。

減算のときは、1と比較するので、入力が0の場合、出力が1になります。つまり1の補数になります。

減算は、2の補数(=1の補数+1)で計算したいので、上記で作った値に、+1が必要になります。これには、Full Adder のCinから1を入力します。

減算加算の切り替え(減算フラグ)と、Cinからの+1入力を別々に書くと上記のような回路になります。こちらのほうが分かりやすいです。ただし、加算の時は、フラグとCinを0にして、減算の時は、フラグとCinを1にするので、繋いでしまったほう場部品が少なくなります。よって、以下のような回路になります。

補数の仕組みが分からないと難しい

最後に加算器と加減算器を見比べてみる

加算器と加減算器を比較すると、XOR回路の有無だけの違いです。2の補数を使いXOR回路を追加するだけで加算、減算が可能になります。

2bit 加算器
2bit 加減算器

ダウンロード


この記事を書くために書いた回路なので、ファイルが整ってませんが、Logisimのプロジェクトファイルです。参考にしてください。

http://hajimete-program.com/logisim/adder.circ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA