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.
arithmetic
binary
user76675
fonte
fonte
Respostas:
Eu assumo que a tarefa é calcularm u l ( 10 , a ) = 10 a . Você não precisa fazer multiplicação. Um único somador binário é suficiente, pois
fonte
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.imul
instrução. ( godbolt.org/g/uSUSHu para x86, ARM e MIPS saída do compilador asm para uma*10
função trivial que você provavelmente pode ler mesmo que não saiba asm). Na verdade, para o x86, os compiladores normalmente usama = a + a*4;
a+=a;
porque é mais eficiente: stackoverflow.com/questions/6120207/imul-or-shift-instruction .Multiplicar por 10 é o mesmo que multiplicar por( 1010)2 . Para multiplicar um número bináriox por 10, temos apenas que adicionar x 0 e x 000 . Por exemplo,6 × 10 = 60 é implementado por
fonte
Certo. Você apenas calcula1010b×110b usando 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.
e note que11100b=60d , como esperado.
fonte
Multiplique por 8 (turno esquerdo 3) e, em seguida, adicione uma multiplicação por dois (turno esquerdo 1).
fonte