La sottrazione è il meccanismo fondamentale e più primitivo: a - b
vs. a > b
. Dopo la sottrazione di a-b
la maggior parte delle CPU imposta alcuni flag in modo tale da poter determinare: result > 0
, result == 0
, result < 0
, che possiamo usare per la ramificazione condizionale.
La sottrazione, a - b
, viene eseguita con l'aggiunta: a + -b
, e, la negazione ( -b
) viene eseguita dal complemento più uno: ~b + 1
(per i numeri interi del complemento a due). Quindi, a - b
è a + ~b + 1
. E con appropriati flag di carry possiamo determinare maggiore, uguale o minore, in modo da inferire la relazione di magnitudine.
Ora, a + ~b + 1
richiede un tre sommatore di input per il bit di ordine basso; tuttavia, qualsiasi aggiunta di byte / parole richiede sommatori di ingresso a tre bit (per accogliere due ingressi più un bit di trasferimento) per tutte le posizioni di bit, tranne il bit di ordine basso, dove non è presente alcun input di carry. Quindi, l'onere per +1
di negazione (per sottrazione) è discutibilmente minimo: che il bit di ordine basso ha bisogno dello stesso sommatore completo (input a 3 bit) di tutte le altre posizioni di bit.
(Il complemento è semplicemente un'inversione di ciascun bit sul posto, molto economico.)