バイナリ減算
10進数に適合した標準的な手法を使用して、ある2進数を別の2進数から減算できます(各ビットペアの右から左への減算、必要に応じてビットから左への「借用」)。ただし、すでにおなじみの(そしてより簡単な)2進加算の手法を利用して減算できるのであれば、それはより良いでしょう。
先ほど学習したように、「2の補数」法と負の場所の重みビットを使用して、負の2進数を表すことができます。ここでは、これらの負の2進数を使用して、加算によって減算します。
問題の例を次に示します。
減算:7 10 -5 10 同等の追加:7 10 +(-5 10 )。
7と負の5を2進数(2の補数)形式で表すだけの場合、必要なのは3ビットと負の重みビットだけです。
ポジティブセブン=0111 2 負の5 =1011 2
それでは、それらを一緒に追加しましょう:
。 1111 <---キャリービット 。 0111 。 + 1011 。 ------ 。 10010 。 | 。余分なビットを破棄します 。 。回答=0010 2
数値ビットフィールドはすでに3ビットと負の重みビットとして定義されているため、回答(1)の5番目のビットは破棄され、結果は0010 2 になります。 、または正の2つ、これが正解です。
その余分なビットを破棄する理由を理解するもう1つの方法は、小さい数値の左端のビットが負の重み(この場合は負の8に等しい)を持っていることを覚えておくことです。
これらの2つの2進数を合計すると、実際にMSBで行っているのは、上位の数値のMSBから下位の数値のMSBを減算することです。減算では、1桁またはビットを次の左の場所の重みに「運ぶ」ことはありません。
別の例を試してみましょう。今回は数値を大きくします。 -25 10 を追加したい場合 18 10 まで 、最初にバイナリビットフィールドの大きさを決定する必要があります。
問題の最大(絶対値)数である25を表すには、少なくとも5ビットと、負の重みビット用の6番目のビットが必要です。まず、正の25を表し、次に2の補数を見つけて、すべてを1つの数え上げにまとめます。
+25 10 =011001 2 (6ビットすべてを表示) 11001 2 の補数 =100110 2 1の補数+1 =2の補数=100111 2 -25 10 =100111 2
基本的に、負の32と正の7(バイナリ111 2 )の値を持つ負の重み(6番目)のビットを使用して、負の25を表します。 。
。 18 10 =010010 2 。 。それでは、それらを一緒に追加して、何が得られるかを見てみましょう。 。 。 11 <---キャリービット 。 100111 。 + 010010 。 -------- 。 111001
左側に「余分な」ビットがなかったため、破棄するビットはありません。答えの左端のビットは1です。これは、2の補数形式で、答えが否定的であることを意味します。すべてのビットにそれぞれの重み値を掛けて合計することにより、回答を10進形式に変換すると、次のようになります。
(1 x -32 10 )+(1 x 16 10 )+(1 x 8 10 )+(1 x 1 10 )=-7 10
確かに-7 10 -25 10 の適切な合計です および18 10 。
関連するワークシート:
- バイナリ数学ワークシート
産業技術