我正在尋找一個很好的解釋爲什麼(不知道如何,我知道)二進制減法總是(?)通過添加補碼等來完成。僅僅是因爲額外的邏輯門將是必要的還是有更多複雜的原因?例如,我可以理解,如果結果是否定的,這將是有問題的 - 代表可能不得不改變。你能想出更多的理由嗎?爲什麼二進制減法總是(?)通過添加補碼完成?
回答
考慮一個8位加法器。有2組8個信號進入,還有一個進位位。您可以構建2個幾乎相同的電路,然後包含一個多路複用器,以選擇將哪個結果存儲在結果寄存器中。或者你可以在一個操作數的路徑中添加一行XOR門。通過與1進行異或運算得到補碼。由於X-Y = X +〜Y + 1,所以還將該「1」饋送到加法器的進位輸入。你現在有一個稍大的電路,可以做兩個操作,而不是一堆更多的電路。您也可以將0提供給一個參數,並使用XOR門實現NOT。加法器也可以稍微修改以執行其他操作 - 比如兩個操作數上的XOR - 只需很少的電路。這一切都可以追溯到小規模集成日期,當時門將被最小化。自那以後沒有任何理由再以其他方式做。請參閱以下74181 4位ALU的電路圖,該電路可以執行一系列操作: 74181 description
這是一個很好的提示。在我的關於微處理器的書中,我曾經見過74181 ALU,但是沒有那麼詳細,特別是那個小程序的交互性。 – tmr 2011-03-10 11:10:49
你已經擊中了頭部,這一切都是關於死亡的空間。爲什麼用更多的電路阻塞ALU?這是可以用於邏輯的空間,或者更小的ALU和更多的內存。
更容易將減法分解爲彙編級別上的兩個操作,而不是將更多功能添加到處理器電路。從本質上講,你只需要添加已有的東西,除非這是單一操作,如果將它作爲補充的補充,那麼可以重新使用加法和補充電路,而不是浪費處理器上的空間來添加你已經有了
- 1. 二進制補碼減法
- 2. 什麼是二進制補碼整數?
- 3. 二進制加法/減法
- 4. 二進制補碼
- 5. 當數字太大而無法形成二進制補碼時,無符號二進制減法
- 6. 補碼十六進制減法
- 7. 如何檢查二進制補碼減法方程的負解?
- 8. 7位二進制補碼
- 9. 二進制補碼stm32 c
- 10. 二進制補碼算術
- 11. std_logic_vector的二進制補碼
- 12. 二進制補碼錶示
- 13. 二進制補碼查詢
- 14. 16位二進制補碼
- 15. 二進制補碼轉換
- 16. 快速2的補碼減法/加法十六進制
- 17. 使用二進制補碼進行按位相減的溢出
- 18. 字節爲int與二進制補碼
- 19. 二進制減法
- 20. 十進制數的二進制補碼
- 21. 爲什麼在二進制補碼(-1 >> 1)== -1而不是0?
- 22. 如何將補碼從二進制補碼轉換爲
- 23. 添加兩個8位二進制補碼
- 24. 什麼是二進制編碼PDF?
- 25. 將十六進制轉換爲二進制和16位二進制補碼
- 26. 爲什麼二進制Keras CNN總是預測1?
- 27. Prolog二進制加法無削減(!)
- 28. 將十進制轉換爲二進制補碼,溢出
- 29. 將二進制補碼轉換爲十進制
- 30. 轉換十進制轉換爲二進制補碼
您可能要查看以下相關問題:http://stackoverflow.com/questions/1125304/why -is-twos-complement-used-to-represent-negative-numbers – 2011-03-09 16:17:12