Làm thế nào tôi có thể nhân một biểu diễn nhị phân với mười bằng cách sử dụng cổng logic?


8

Vì vậy, tôi hiện đang làm việc trên một cái gì đó và tôi đã chuyển đổi tất cả các chữ số thập phân 0-9 thành nhị phân. Nhưng bây giờ tôi muốn nói 6 ở dạng nhị phân và tăng thứ tự độ lớn của nó lên cơ số 10 (biến 6 thành 60) mà không cần chuyển đổi trở lại cơ sở 10. Điều này có thể không và nếu có thì có cách nào để làm điều đó với bất kỳ số nào, X -> X0?

EDIT 1: xin lỗi, phần đầu tiên của câu hỏi rất mơ hồ và tôi quên đề cập đến việc tôi đang cố gắng làm điều này với các cổng logic.


Bạn có biết làm thế nào các mạch nhân làm việc?
rus9384

2
Tất nhiên là có thể - CPU có thể thực hiện tất cả các loại số học, vậy tại sao không? Sẽ không dễ dàng như thêm dấu 0; đó được gọi là dịch chuyển trái trong biệt ngữ CPU, trong nhị phân rõ ràng nhân với (lũy thừa) hai.
Raphael

Không, tôi không giải thích
user76675

7
Sẽ là kỳ lạ nếu hầu hết chúng ta tình cờ có số ngón tay là cơ sở duy nhất (?) Trong đó có thuật toán nhân. (Hay đây sẽ là một lợi thế tiến hóa đáng kinh ngạc?)
PJTraill

1
@ rus9384: Xin lỗi, nhận xét của tôi có ý ám chỉ mỉa mai những gì bạn nêu rõ ràng.
PJTraill

Câu trả lời:


48

Tôi giả sử rằng nhiệm vụ là tính . Bạn không cần phải nhân. Một bộ cộng nhị phân duy nhất là đủ kể từ 10 một = 2 3 một + 2 một nghĩa là bạn thêm một lần trái-chuyển một đến 3 lần trái chuyển một . Để nhân tổng quát m u l ( x , y ) vui lòng xem bài viết này .mbạntôi(10,một)= =10một

10một= =23một+2một
mộtmộtmbạntôi(x,y)

10
+1 để nhận ra đó 10là một hằng số, vì vậy chúng tôi không cần hệ số nhân cho mục đích chung. Nó cũng giúp bạn sử dụng các từ dễ dịch thành cổng logic, vì OP đã đề cập đó là mục tiêu cuối cùng của họ.
Cort Ammon

6
Sự thật thú vị: trong lắp ráp x86, bạn (hoặc một trình biên dịch thông minh) có thể sử dụng thủ thuật này nhân với 10 với độ trễ thấp hơn (một chút) so với một imullệnh. ( godbolt.org/g/uSUSHu cho đầu ra trình biên dịch asm x86, ARM và MIPS cho một *10hàm tầm thường mà bạn có thể đọc được ngay cả khi bạn không biết asm). Trên thực tế đối với x86, trình biên dịch thường sử dụng a = a + a*4; a+=a;vì hiệu quả hơn: stackoverflow.com/questions/6120207/imul-or-shift-inloyment .
Peter Cordes

11

(1010)2xx0x0006×10= =60

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

6

1010b×110b

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

11100b= =60d


-2

Nhân với 8 (shift trái 3) sau đó thêm vào đó nhân với hai (shift trái 1).


Cái nào sẽ nhân nó lên 16 - đó là những gì OP cần làm thế nào?
Raphael

9
10xsố 8x2x
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.