【0093:2進数での乗算方法】 『(±5) x (±3) 』を2進数で計算。

●2進数での
進数での乗算
での乗算(
乗算(掛け算)
『(+5) x ((-3) 』を計算します
計算します。
します。
、
ここで、
被乗数A)は 4 ビット長
ビット長の『 0101 』
ここで、 『 +5 』(被乗数A
『 -3 』(乗数B
、 とします。
乗数B) は 3 ビット長
ビット長の『 101 』
とします。
いろいろなセンサから入力
いろいろなセンサから入力されるデータのビット
入力されるデータのビット長
されるデータのビット長は必ずしも同
ずしも同じではありません。
じではありません。
①計算結果の
計算結果の最大桁数と
最大桁数と同じビット長
じビット長になるように、
になるように、被乗数A
被乗数Aを『ビット拡張
ビット拡張』
拡張』します。
します。『ビット拡張
ビット拡張』
拡張』とは
『最上位ビットの
ことです。
最上位ビットの値
ビットの値を付け足す』ことです。
本例では
本例では、
では、4ビットと3
ビットと3ビットの乗算
ビットの乗算なので
乗算なので、
なので、計算結果の
計算結果の最大桁数
最大桁数は
桁数は7ビットになります
ビットになります。
ります。ここで、
ここで、計算
の有効桁数を
有効桁数を確保するため
確保するために
するために、被乗数A
被乗数Aを『ビット拡張
ビット拡張』
拡張』して7
して7ビットにします
ビットにします。
します。これを怠
これを怠ると思
ると思わぬ計
わぬ計
算ミスを起
ミスを起こします
こします。
ます。
本例では
本例では、
では、 被乗数A『
被乗数A『 0101 』を『 0000101
0000101 』(A')にします。
ます。
②乗算結果は
乗算結果は次式から
次式から得
から得られます
られます。
ます。
乗算結果 =
[A'] x [Bの最上位ビットを
最上位ビットを削除
ビットを削除した
削除した数
した数]
(Bの最上位ビット
最上位ビット位置
ビット位置)
位置)
- [A'] x [2
[2
] x [B
[Bの最上位ビット
最上位ビットの
ビットの値]
・・・ Bが『負数』
負数』の時のみに減算
のみに減算する
減算する
この場合
この場合の
場合の乗算結果は
乗算結果は、7ビットと3
ビットと3ビットの乗算
ビットの乗算となり
乗算となり、
となり、10ビット長
ビット長になりますが、
になりますが、答えは、
えは、下位7
下位7
ビットのみで良
ビットのみで良く、他の上位ビットは
上位ビットは無視
ビットは無視します
無視します。
します。
(+5(000101)
(-3:1101)
0101) x (
101)
A' -->
-->
0 0 0 0 1 0 1 ・・・ 被乗数をビット
被乗数をビット拡張
をビット拡張(
拡張(乗数のビット
乗数のビット長
のビット長の4ビット分
ビット分を付加)
付加)
x
0 1 ・・・ 乗数B
『-3』は『+1』として仮計算。
乗数Bの最上位ビットを
最上位ビットを削除
ビットを削除。
削除。
仮計算。
0 0 0 0 1 0 1
+ 0 0 0 0 0 0 0
0 0 0 0 0 1 0 1
- 0 0 0 0 1 0 1 0 0 ・・・ 『A'x2
2
: A' を 2 ビット左
ビット左シフトすれば
シフトすれば良
すれば良い』 => (注1)
X X 1 1 1 0 0 0 1 ・・・ 答え = -15 (X 部の値は無視して
無視して良
して良い)
上記は
上記は、以下の
以下の計算を
計算を行っています。
っています。
答 = A' x (-3)
・・・ 乗数『
乗数『-3』を変換します
変換します。
します。乗数B
乗数B(101)が
(101)が負数で
負数で、最上位ビット
最上位ビット位置
ビット位置が
位置が
2
= A' x (1 - 2 )
『2
2
= A' x 1 - A' x 2
2
2
のビット位置
のビット位置』
位置』なので、
なので、『1
『1 - 2 』とします。
ます。
2
2
Bが『-2』なら『
なら『2 - 2 』、『『-1』なら『
なら『3 - 2 』とします。
ます。
注1) 減算について
減算について、
について、
『0000101
000010100
010100 を減算する
減算する』
する』ということは
ということは『
ことは『1111010
111101011
101011+1=111101100
11+1=111101100 を加算』
加算』することと同
することと同じです。
じです。
9
9
9
『0000101
000010100
010100 = 2 -X』とすると『
とすると『-0000101
000010100
010100 = +X+X-2 』となり、
となり、『X を加算したものから
加算したものから 2 を減算』
減算』
9
することと等
することと等しく、
しく、結果は
結果は下位7
下位7ビットのみを取
ビットのみを取るので『
るので『-2 』の減算は
減算は不要となりま
不要となります
となります。
ここで、
ここで、
9
X = 2 - 0000101
000010100
010100
9
= {(2 -1)1)-0000101
000010100
010100}
00} + 1
= {(1000000000 -1) - 0000101
000010100
010100}
00} + 1
= ( 111111111
=
- 0000101
000010100
010100)
00) + 1
1111010
111101011
101011 + 1
= 111101100
です。
です。つまり『
つまり『0000101
000010100
010100 をビット反転
をビット反転させて
反転させて 1 を加算』
加算』すれば求
すれば求められます。
められます。
結局、
結局、減算は
減算は加算で
加算で計算できます
計算できます。
できます。
【例題の
例題の減算部を
減算部を加算で
加算で行う】
0 0 0 0 0 1 0 1
0 0 0 0 0 1 0 1
- 0 0 0 0 1 0 1 0 0 => + 1 1 1 1 0 1 1 0 0
X X 1 1 1 0 0 0 1
X X 1 1 1 0 0 0 1
・・・ 答え = -15 (X 部は無視)
無視)
【他の計算例】
計算例】
(-5(1011
5(1011)x
1011)x ((-3:101
3:101)
101)
A' -->
-->
((-5(1011
5(1011)x
1011)x (+3:01
(+3:011
011)
(+5(0101
(+5(0101)x
0101)x (+3:01
(+3:011
011)
1 1 1 1 0 1 1
0 0 0 0 1 0 1
1 1 1 1 0 1 1
x
0 1
x
1 1 1 1 0 1 1
+
0 0 0 0 0 0 0
1 1 1 1 0 1 1
x
1 1 1 1 0 1 1
+
0 1 1 1 1 0 1 1
-
1 1
0 0 0 0 1 0 1
1 1 1 1 0 1 1
+
1 1 1 1 0 0 0 1
-
0 0 0 0 0 0 0
1 1
0 0 0 0 1 0 1
0 0 0 0 1 1 1 1
-
0 0 0 0 0 0 0
X X 0 0 0 1 1 1 1
X X 1 1 1 0 0 0 1
X X 0 0 0 1 1 1 1
・・・ 答え = +15
・・・ 答え = -15
・・・ 答え = +15