Como posso multiplicar uma representação binária por dez usando portas lógicas?

8

No momento, estou trabalhando em algo e converti todos os dígitos decimais de 0 a 9 em binários. Mas agora eu quero dar a palavra 6 em binário e aumentar sua ordem de magnitude pela base 10 (transformando 6 em 60) sem converter de volta para a base 10. Isso é possível e, se houver, existe uma maneira de fazê-lo com qualquer número, X -> X0?

EDIT 1: desculpe a primeira parte da pergunta foi super vaga e eu esqueci de mencionar que estou tentando fazer isso com portas lógicas.

user76675
fonte
Você sabe como funcionam os circuitos de multiplicação?
precisa saber é o seguinte
2
Claro que é possível - as CPUs podem fazer todos os tipos de aritmética, então por que não? Não será tão fácil quanto adicionar um 0 à direita; isso é chamado de deslocamento à esquerda no jargão da CPU, que em binário se multiplica claramente com (poderes de) dois.
Raphael
Não, eu não explique
user76675
7
Seria estranho se a maioria de nós tivesse o número de dedos que era a única base (?) Na qual havia um algoritmo de multiplicação. (Ou isso seria uma vantagem evolutiva surpreendente?)
PJTraill
1
@ rus9384: Desculpe, meu comentário foi feito para insinuar ironicamente o que você declara explicitamente.
PJTraill

Respostas:

48

Eu assumo que a tarefa é calcular mvocêeu(10,uma)=10uma. Você não precisa fazer multiplicação. Um único somador binário é suficiente, pois

10a=23a+2a
ou seja, você adiciona uma vez deslocada para a esquerda a deslocado para a esquerda três vezes a. Para multiplicação geralmul(x,y)por favor, consulte este artigo .
fade2black
fonte
10
+1 para reconhecer que 10é uma constante; portanto, não precisamos do multiplicador de uso geral. Também ajuda você a usar palavras fáceis de traduzir em portas lógicas, já que o OP mencionou que esse era o objetivo final.
Cort Ammon
6
Curiosidade: na montagem x86, você (ou um compilador inteligente) pode usar esse truque multiplicado por 10 com latência (ligeiramente) menor do que uma imulinstrução. ( godbolt.org/g/uSUSHu para x86, ARM e MIPS saída do compilador asm para uma *10função trivial que você provavelmente pode ler mesmo que não saiba asm). Na verdade, para o x86, os compiladores normalmente usam a = a + a*4; a+=a;porque é mais eficiente: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes
11

Multiplicar por 10 é o mesmo que multiplicar por (1010)2. Para multiplicar um número bináriox por 10, temos apenas que adicionar x0 0 e x000. Por exemplo,6×10=60 é implementado por

0 00 0110 00 0+110 00 00 00 011110 00 0
A entrada é (6)10=(110)2e a saída é (111100)2=(60)10.
Yuval Filmus
fonte
6

Certo. Você apenas calcula1010b×110busando a versão binária da multiplicação longa (ou algum outro algoritmo). O bom da multiplicação longa no binário é que você nunca precisa carregar nada, exceto quando estiver adicionando coisas no final.

   1010
    110 x
  ------
    000
   110
  000
 110
--------
 111100
--------

e note que 11100b=60d, como esperado.

David Richerby
fonte
-2

Multiplique por 8 (turno esquerdo 3) e, em seguida, adicione uma multiplicação por dois (turno esquerdo 1).

Reed Shilts
fonte
O que seria multiplicá-lo por 16 - qual é o que o OP precisa como?
Raphael
9
@Raphael Acho que você entendeu errado: esta resposta sugere computação 10x por computação 8x e 2xe adicioná-los juntos. Portanto, é apenas um engano da resposta aceita. Reed, adicione apenas novas respostas se eles disserem algo que ainda não foi dito.
David Richerby