2010-05-17 52 views
1

如果從較小的數字中減去一個大數字,則需要借位。進位標誌在減法操作中起到借位的作用。 現在假設我們想從56中減去66,顯然需要借用並且設置進位標誌。現在,如何執行這種減法來獲得結果-10,計算機將如何區分結果將成爲負數。請解釋過程。進位標誌和減號問號

+2

從66中減去56是10. – WhirlWind 2010-05-17 18:01:51

+4

閱讀關於二進制補碼的內容:http://en.wikipedia.org/wiki/Two%27s_complement – WhirlWind 2010-05-17 18:02:34

回答

4

通常情況下,減法被實現爲否定,然後添加。因此,對於您的示例,CPU將在內部使用56並添加-66。在x86(或大多數其他現代處理器)上,否定將使用二進制補碼來完成,這意味着否定轉換爲「補充所有位,然後添加一個(並忽略任何執行)」。

0011 1000 
- 0100 0010 
    --------- 

第二個操作數被轉換如下:

complement bits: 1011 1101 
Increment:  1011 1110 

所以這是執行的操作是:

0011 1000 
+ 1011 1110 
-------------- 
= 1111 0110 

該結果可以被看作是任一246(作爲一個無符號數)或-10(作爲簽名號碼)。

-1

電腦不會區分這一點。計算機不關心符號,你和編譯器都這樣做。您將此值存儲到已簽名的變量中,然後將其用作已簽名的變量。長號碼和負號碼之間沒有語義上的區別。

3

如果計算機使用2的補碼,則不需要該計算機。

讓我們考慮一個簡單的例子,3 - 5:

0011 = 3 
- 0101 = 5 
———————— 
    1110 = 14 

結果是14,但在2的補,這也是-2值。所以,如果代碼使用簽名類型,它會正確地得到-2。否則,它將得到14.這完全取決於程序員如何編寫代碼。

1

計算機不做減法。它增加了一個負數。

所以,56 - 66 = 56 +(-66)

56 = 0x38(十六進制38)

-66 = 0xFFFFFFBE(在32位的系統的0x42補碼)

如果你確實要添加這些十六進制數字,你將以0xFFFFFFF6結尾,這是一個十進制數爲0xA的負數。

-2

進位標誌與符號位不同。進位標誌用於執行多部分算術,其中一個加法或減法的結果需要影響下一個較高部分。

隨着多年來寄存器規模的增加以及隨行人員的減少,您不會再看到這種做法了。