論理ゲートを使用して、バイナリ表現を10倍する方法を教えてください。


8

だから私は現在何かに取り組んでおり、0から9までのすべての10進数を2進数に変換しました。しかし、今私はバイナリで言う6を取り、10に変換せずに10の桁でその桁を増やしたいと思います(6を60に変えます)これは可能ですか? -> X0?

編集1:申し訳ありませんが、質問の最初の部分は非常にあいまいであり、私はこれを論理ゲートで実行しようとしていることを言及するのを忘れていました。


乗算回路がどのように機能するか知っていますか?
rus9384 2017

2
もちろん、それは可能です-CPUはあらゆる種類の算術演算を実行できます。それでは、なぜこれができないのでしょうか。末尾に0を追加するほど簡単ではありません。これは、CPU用語では左シフトと呼ばれ、2進数で2の累乗が明らかに乗算されます。
ラファエル

いいえ、説明しません
user76675

7
たまたま私たちのほとんどが、乗算アルゴリズムがあった唯一の(?)ベースである指の数を持っていたとしたら、それは奇妙でしょう。(または、これは驚くべき進化上の利点でしょうか?)
PJTraill 2017

1
@ rus9384:申し訳ありませんが、私のコメントは皮肉にもあなたが明示的に述べていることをほのめかすことを意図したものでした。
PJTraill 2017

回答:


48

タスクはを計算することであると仮定します。乗算を行う必要はありません。10 a = 2 3 a + 2 a は1回左シフトされたaを追加することを意味するため、単一のバイナリ加算器で十分です。mul(10,a)=10a

10a=23a+2a
a 3回に左にシフト。一般的な乗算m u l x y については、この記事を参照してくださいamul(x,y)

10
+1 10は定数であることを認識するため、汎用の乗数は必要ありません。また、OPが最終目標であると述べたため、ロジックゲートに簡単に変換できる表現を使用するのにも役立ちます。
Cort Ammon

6
おもしろい事実:x86アセンブリでは、ユーザー(またはスマートコンパイラ)がこのトリックを10倍にして、imul命令よりも(わずかに)レイテンシを低くすることができます。(x86、ARM、MIPS用のgodbolt.org/g/uSUSHuは、asmを*10知らなくても読めるはずの簡単な関数のasmコンパイラ出力です)。実際にはx86の場合、コンパイラーは通常、a = a + a*4; a+=a;より効率的なために使用します:stackoverflow.com/questions/6120207/imul-or-shift-instruction
Peter Cordes 2017

11

10を掛けることは、を掛けることと同じです。2進数xに10 を掛けるには、x 0x 000を追加するだけです。例えば、(1010)2xx0x0006×10=60

001100+110000111100
(6)10=(110)2(111100)2=(60)10


-2

8を掛け(左シフト3)、次に2を掛けます(左シフト1)。


これは16倍になります-これはOPがどのように必要とするものですか?
ラファエル

9
@ラファエル私はあなたが誤解していると思います:この答えは計算を示唆しています10バツ コンピューティングによって 8バツ そして 2バツそれらを一緒に追加します。だから、それは受け入れられた答えのほんの一部です。リード、まだ言われていないことを言う場合にのみ、新しい答えを追加してください。
David Richerby
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.