求補運算

求補運算

求補運算是種運算,這種運算是由補碼的轉換過程升級而來。有了補碼,為什麼還要提出求補運算這種新的運算?要理解求補運算的提出原因,還要從補碼說起。

簡介


幾千年來,人類一直努力創造、傳播、管理和保存信息。這種努力和人類的文明一樣古老,而且這種努力已經全方位拓展信息架構的來源。這些歷史有益於對信息架構的理解,有益於擴展對人類文化演進的視野。
補碼提出的原因是為了完善地在機器中表示負數,補碼能沿用至今是因為補碼編碼方案能十分方便的進行有符號的運算。然而補碼沒有涉及到運算符,沒能解決互逆的加減運算相互轉化的問題。
全加器發明后,計算機可以進行加法運算了。對於減法運算,要麼設計全新的減法器,要麼合理運用現有的全加器,通過將減法運算轉換為加法運算來間接實現減法運算。出於CPU成本和體積的考慮,人們選擇了後者。如何將減法運算轉換為加法運算,求補運算被提了出來。

求補法則


求補運算的運演演算法則:將一個數(包括正數和負數)所有二進位位(包括符號位和數值位)取反,然後在最低位加上1。
求補運算的適用範圍:將減法運算轉換為加法運算,而且只能進行這類的運算轉換。
求補運算的觸發條件:遇到主動給定的減法運算符。比如遇到彙編語言中的SUB,SBB指令。觸發條件必須人為給出,畢竟計算機只是機器,它只做你編程安排好的事,不可能做僅僅在你心中所想的事。
補運算的轉換過程:遇到減法運算符,馬上將減法運算符右邊數據轉換成其補碼形式,然後將減法運算符左邊的數據加上前面所得的補碼形式。
例如 3-(2*1) 3-2 00000011(-)00000010 00000011(+)11111110 結果為100000001,最高位第8位自動丟棄變成00000001 ,(-)這裡是運算符不再當成數的符號,這是由指令中直接給出的mov ax,3 mov bx,2 sub ax,bx。
例如 5-(-9/3) 5-(-3) 00000101(-)11111101 00000101(+)00000011結果為00001000十進位的8。
求補運算的正確性是如何得到保障的:將運算符當成負號處理了。A-(B)變為A+(-B),問題是如何用B表示-B,而補碼編碼剛好能正確地實現這種表達方式。求補運算的正確性是由補碼碼制的正確性來保障的。