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.
arithmetic
binary
pengguna76675
sumber
sumber
Jawaban:
Saya berasumsi bahwa tugasnya adalah menghitungm u l ( 10 , a ) = 10 a . Anda tidak perlu melakukan multiplikasi. Adder biner tunggal sudah cukup
sumber
10
adalah 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.imul
instruksi. ( godbolt.org/g/uSUSHu untuk keluaran kompiler x86, ARM, dan MIPS untuk*10
fungsi sepele yang mungkin dapat Anda baca meskipun Anda tidak tahu asm). Sebenarnya untuk x86, kompiler biasanya digunakana = a + a*4;
a+=a;
karena itu lebih efisien: stackoverflow.com/questions/6120207/imul-or-shift-instruction .Mengalikan dengan 10 sama dengan mengalikan dengan( 1010)2 . Untuk mengalikan nomor binerx dengan 10, kita hanya perlu menambahkan x 0 dan x 000 . Sebagai contoh,6 × 10 = 60 diimplementasikan oleh
sumber
Tentu. Anda baru saja menghitung1010b×110b menggunakan 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.
dan perhatikan itu11100b=60d , seperti yang diharapkan.
sumber
Kalikan dengan 8 (shift kiri 3) lalu tambahkan kalikan dengan dua (shift kiri 1).
sumber