Bagaimana saya bisa mengalikan representasi biner dengan sepuluh menggunakan gerbang logika?

8

Jadi saya sedang mengerjakan sesuatu dan saya telah mengubah semua angka desimal 0-9 menjadi biner. Tapi sekarang saya ingin mengatakan 6 dalam biner dan meningkatkan urutan besarnya dengan basis 10 (mengubah 6 menjadi 60) tanpa mengubah kembali ke basis 10. Apakah ini mungkin dan jika demikian apakah ada cara untuk melakukannya dengan angka berapa pun, X -> X0?

EDIT 1: maaf bagian pertama dari pertanyaan itu sangat kabur dan saya lupa menyebutkan bahwa saya mencoba melakukan ini dengan gerbang logika.

pengguna76675
sumber
Apakah Anda tahu cara kerja sirkuit multiplikasi?
rus9384
2
Tentu saja itu mungkin - CPU dapat melakukan semua jenis aritmatika, jadi mengapa tidak melakukan ini? Ini tidak akan semudah menambahkan trailing 0; itu disebut pergeseran kiri dalam istilah CPU, yang dalam biner jelas berlipat ganda dengan (kekuatan) dua.
Raphael
Tidak, saya tidak mohon jelaskan
user76675
7
Akan aneh jika kebanyakan dari kita memiliki jumlah jari yang merupakan satu-satunya basis (?) Di mana terdapat algoritma multiplikasi. (Atau apakah ini akan menjadi keuntungan evolusi yang luar biasa?)
PJTraill
1
@ rus9384: Maaf, komentar saya dimaksudkan untuk menyindir secara ironis apa yang Anda nyatakan secara eksplisit.
PJTraill

Jawaban:

48

Saya berasumsi bahwa tugasnya adalah menghitung mkamul(10,Sebuah)=10Sebuah. Anda tidak perlu melakukan multiplikasi. Adder biner tunggal sudah cukup

10Sebuah=23Sebuah+2Sebuah
berarti Anda menambahkan satu kali bergeser ke kiri Sebuah ke 3 kali bergeser ke kiri Sebuah. Untuk perkalian umummkamul(x,y)silakan lihat artikel ini .
fade2black
sumber
10
+1 untuk mengenali itu 10adalah konstanta, jadi kita tidak perlu pengganda tujuan umum. Ini juga membantu Anda menggunakan kata-kata yang mudah diterjemahkan ke dalam gerbang logika, karena OP menyebutkan itu adalah tujuan akhir mereka.
Cort Ammon
6
Fakta menyenangkan: dalam perakitan x86, Anda (atau kompiler pintar) dapat menggunakan trik ini kalikan dengan 10 dengan (sedikit) latensi lebih rendah daripada imulinstruksi. ( godbolt.org/g/uSUSHu untuk keluaran kompiler x86, ARM, dan MIPS untuk *10fungsi sepele yang mungkin dapat Anda baca meskipun Anda tidak tahu asm). Sebenarnya untuk x86, kompiler biasanya digunakan a = a + a*4; a+=a;karena itu lebih efisien: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes
11

Mengalikan dengan 10 sama dengan mengalikan dengan (1010)2. Untuk mengalikan nomor binerx dengan 10, kita hanya perlu menambahkan x0 dan x000. Sebagai contoh,6×10=60 diimplementasikan oleh

001100+110000111100
Inputnya adalah (6)10=(110)2, dan hasilnya adalah (111100)2=(60)10.
Yuval Filmus
sumber
6

Tentu. Anda baru saja menghitung1010b×110bmenggunakan versi biner dari perkalian panjang (atau beberapa algoritma lainnya). Hal yang menyenangkan tentang perkalian panjang dalam biner adalah Anda tidak harus membawa apa pun, kecuali ketika Anda menambahkan semuanya pada akhirnya.

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

dan perhatikan itu 11100b=60d, seperti yang diharapkan.

David Richerby
sumber
-2

Kalikan dengan 8 (shift kiri 3) lalu tambahkan kalikan dengan dua (shift kiri 1).

Reed Shilts
sumber
Yang mana yang akan mengalikannya dengan 16 - yang mana OP perlu bagaimana?
Raphael
9
@ Raphael Saya pikir Anda salah paham: jawaban ini menunjukkan komputasi 10x dengan komputasi 8x dan 2xdan menambahkannya bersama. Jadi itu hanya penipuan jawaban yang diterima. Reed, harap hanya tambahkan jawaban baru jika mereka mengatakan sesuatu yang belum dikatakan.
David Richerby