如果我用Two's Complement方法添加兩個帶符號二進制數,爲什麼它自動意味着如果進入MSB(符號)和進位不一致,溢出已被觸發?二進制補碼檢測溢出與進位
2
A
回答
0
讓我們來看一個事實。
當我們添加一個負值和一個正值操作數時,結果將始終在表示範圍內。當我們添加具有相同符號的兩個數字(正數或負數)並且結果符號相反時,會發生溢出。
當我們在二進制補碼中添加數字時,我們將第一個操作數的符號位與第二個操作數的符號位相加。
當我們添加陽性+正操作數,符號位的總和爲0
0XXX (positive)
+ 0XXX (positive)
------
0XXX (positive)
這意味着它不會不管發生什麼事,永遠不會有一個進位添加正數+正操作數時。
所以,如果有一個隨身攜帶的成符號位
1
0XXX (positive)
+ 0XXX (positive)
------
1XXX (negative)
那隨身攜帶的1位將成爲結果的符號。這意味着我們添加了兩個積極的操作數,結果我們得到了一個負數。
搬出= 0
隨身攜帶的符號位= 1個
OVERFLOW!
當我們添加負+負操作數,符號位的總和是0與搬出。
1XXX (negative)
+ 1XXX (negative)
------
10XXX (positive)
這意味着發生什麼並不重要,在添加負+負操作數時總是會執行一次。請注意,通過「默認」結果將是一個正數。它「需要」將結果調整爲與操作數相同的符號。如果在符號位中有一個進位,我們將有兩個負運算數,結果爲負。
所以,如果有沒有隨身攜帶到符號位
0
1XXX (negative)
+ 1XXX (negative)
------
10XXX (positive)
那隨身攜帶的位0將成爲結果的符號。這意味着我們添加了兩個負運算數,結果我們得到了一個正數。
搬出= 1
隨身攜帶的符號位= 0
OVERFLOW!
相關問題
- 1. 如何在二進制補碼中檢測到溢出?
- 2. 使用二進制補碼進行按位相減的溢出
- 3. 16位二進制補碼
- 4. 7位二進制補碼
- 5. 將十進制轉換爲二進制補碼,溢出
- 6. 二進制補碼
- 7. 這是一個溢出? - 二進制補碼
- 8. 我們是否忽略二進制補碼溢出
- 9. 將十六進制轉換爲二進制和16位二進制補碼
- 10. 二進制補碼算術
- 11. 二進制補碼stm32 c
- 12. 二進制補碼查詢
- 13. 二進制補碼轉換
- 14. 二進制補碼錶示
- 15. 二進制補碼減法
- 16. std_logic_vector的二進制補碼
- 17. 字節爲int與二進制補碼
- 18. 十六進制加法溢出檢測
- 19. One的二進制補碼8位有符號的大小,以二進制
- 20. 二進制中最小的二進制補碼
- 21. 帶分數的二進制數的二進制補碼
- 22. 基數的二進制補碼二進制數
- 23. 在二進制中設置二進制補碼
- 24. 如何獲得int的32位二進制補碼位模式?
- 25. 二進制補碼範圍在c
- 26. 二進制補碼0到1,1,0到
- 27. Verilog中的二進制補碼
- 28. ASM問題,二進制補碼
- 29. 長整數的二進制補碼
- 30. 二進制補碼的Tmax和Tmin
我不得不說,這是自從我加入SO後我最喜歡回答的問題。對不起,有人花了這麼長時間來回答它。 – GabrielOshiro