簡體   English   中英

如何使用補碼符號從負數中減去負數?

[英]How to subtract negative numbers from negative numbers using Complement notation?

我剛開始學習。 我試圖徹底而深入地理解這一點。 我有點理解它,只要它是從較大的數字中減去較小的數字或從較小的數字中減去較大的數字,但是當問題中的被減數也是負數時,它會讓我感到困惑。 我得到哪個值的補碼?

  1. 當被要求解決諸如 0101 - 1100 之類的問題時,我何時將 1 視為負位而不是無符號位? 我什么時候會把它讀成 5-12 而不是 5-(-3)?

  2. 您如何使用One's Complement解決 0101 - 1100 問題? 可能嗎? 我是否將這個問題視為要求我從 5 中減去 12 而不是從 5 中減去 -3。

  3. 如何從負數中減去一個數? 例如, -5-7 ? 您如何僅使用 One's Complement來做到這一點? 你得到 7 或 5 或兩者的補碼並將它們相加嗎? 二進制補碼會如何變化?

請有人可以為我澄清這一點,我想了解這一點並繼續前進。

因此,在搜索其他資源並獲得一些幫助之后,我已經清除了所有這些。 我會回答它可以幫助遇到這個問題的任何人。

1.識別 0101 - 1100 是讀作 5-12 還是 5-(-3) 只能在給出關於它是有符號還是無符號的上下文的情況下才能完成。

2.用一個補碼,0101 - 1100 = 5-(-3) = 5+3。 我們通過取反/取反 = 0011 = 3 得到 1100 的補碼。然后我們進行加法:

   5+3 = 0101 + 0011 = 1000        

答案不是 8,結果是否定的。 這意味着它已經溢出,因為我們添加了兩個相同符號的值並得到了相反符號的結果。 發生溢出是因為4位二進制補碼的范圍為 -7 到 +7。 1000 中的 1 占據位置值 -(2^( 4 -1))-1,即 -7。 所以它已經從 +7 變為 -7 並帶有額外的 1 值(8-7 = +1),這意味着 -7 本質上是 +7 + 1 並且額外的 1 溢出到 -7 中。 這是因為從 0 開始的范圍內的第 8 個值在 4 位反碼表示中是 -7。 考慮一下:

Values from -7 to +7 can form a wheel. -7,-6,-5,-4,-3,-2,-1,-0,0,1,2,3,4,5,6,7
If you keep adding 1 to each value above it will take you to the next value and 
keep going in a circle in binary form.
Example:

+7 = 0111
0111 + 1 = 1000 = -7
1000 + 1 = 1001 = -6 
1001 + 1 = 1010 = -5 and on on and on.

所以計算是正確的,只是 4 位的補碼表示不能表示 +8 並溢出到 -7。

**3.**在這種情況下,它會下溢,其中 -5-7 的負數太低而無法用 4 位表示的 Ones Complement 和 Twos Complement 表示。

-5 in Ones' Complement = 1010,    -7 in Ones' Complement = 1000
-5-7 = -a-b = -(a+b)
So mathematically you can look at it as 1010+1000 or -(0101+0111)
          1010                                      0101
         +1000                                     +0111
=Carry->1 0010                                  = -(1100)= -(-3)= 3  
         +   1
=         0011= 3

因此,無論如何,我們最終都會得到相同的答案,但我會推薦第一種方法,以免引起混淆。 兩個負值相加后的結果是+3,而值本身是3,這表明它已經下溢,因為-12不能用4位補碼表示,因為值只是從-7到+7,如上所述。 因此,請參閱上面的值范圍列表。 如果你倒數7 個單位,你最終會得到 +3。 如果值的范圍包含 -12 值,那么從 -5 往回計數將使您最終得到 -12。

使用二進制補碼,不同之處在於您將 1 添加到二進制補碼值以獲得二進制補碼。 然后以相同的方式添加它們。

-5 in Ones' Complement = 1010,    -7 in Ones' Complement = 1000
      Two's Complement = 1011,          Two's Complement = 1001
          
                  1011                                     
                 +1001                                     
= Overflow bit->1 0100 = +4

在二進制補碼計算中,如果在添加兩個不同符號的值時得到溢出位,或者在添加相同符號時得到相同符號的答案,則會忽略溢出位。 然而,在上述情況下,在添加兩個負值之后,它是 +4 的 0100。 所以它表示溢出。

值是 +4 而不是像 Ones' Complement 中的 +3 的原因是,與 One's Complement 相比,Two's Complement 范圍內有一個額外的負值,因為 Two's Complement 沒有負 0。

The range of values for Two's Complement 4 bit representation is:
-2^(4-1) to +(2^(4-1))-1 which is equal to -8 to +7

-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7

If you count backwards 7 units from -5, you end up at +4. Since -12 cannot still 
be represented between -8 to +7, +4 is where you end up with the overflow.

我希望這可以解決問題並幫助某人。 如果有任何錯誤,請告訴我,我會糾正它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM