邏輯沒有減法,減法是通過加法完成的。記住,二進制補碼「反轉並加1」。當你做小數運算並且加99 + 3時,第一列是9 + 3 = 2攜帶1.該結轉數進入頂部,第二列1(進位)加上9(第一操作數)的進位槽加上0 (用於第二操作數的placholder)。是0進位1,第3列是1 + 0 + 0 = 1進位零,我們可以稱之爲完成。您可以顯示三行,進位,第一個操作數,第二個操作數。進位插槽在第一列可用。現在考慮二進制,你可以用二進制與列進行完全相同的數學計算(十六進制只是二進制,四位組,如果你用鉛筆和紙做這個,你會把十六進制分成單獨的位)。所以我們從學校得知a + b = a +(-b)是正確的,並且我們知道在二進制中-b是二進制補碼是倒數並加1。那麼如果你只是簡單的反轉並使用它作爲第二個操作數,並且在第一列的進位時隙中加1,那麼0x1234 - 0xABEF與0x1234 +( - 0xABEF)= 0x1234 +( 〜0xABEF)+ 1 = 0x(〜0x0ABEF)+ 1(增加一些填充)= 0xxF5410 + 1 = 0xF6645。或者如果你想修剪它到16位,那麼它是0x6645。如果你在做32位,那麼它是0xFFFF6645,64位0xFFFFFFFFFFFF6645。就像在十進制99 + 3 = 100或0100或00000000100中一樣,取決於我們想用數字填充多少個地方。
如果我們做了0x1234 - 0x0005 = 0xxFFFFA + 1 = 0x01224會怎麼樣。左邊的填充是零。沒有借款。另一個數字是借來的,左邊的是永遠的。或者另一種想法是否定的答案是否定的。二進制中的負數是倒數,並且右移一位,所以0x001倒數爲0xFFFFF ... FFFFE的位數與您在alu或寄存器中的位數相同,然後加1,得到0xFFFF .... FFFF。如果它是8位寄存器0xFF,則16位0xFFFF,32 0xFFFFFFFF。與上面的0xFFFF ... FF6645一樣。反轉並添加一個0x99BA + 1 = 0x99BB = 39355或實際上-39355。
0x1234 = 4660,0xABEF = 44015,在計算器4460-44015 = -39355。