/ / 1 e 2 sistemi di complemento - binario, matematica, complemento a due, complemento a uno

Sistemi a complemento 1 e 2: binario, matematico, a complemento a due, complemento a un altro

Sto cercando di capire le differenze tra questi due sistemi e il loro impatto sulla programmazione in C.

Da quello che ho imparato da Wikipedia:

  1. entrambi i sistemi sono utilizzati per rappresentare numeri negativi
  2. il complemento di uno applica NOT bit a bit negativo (il sistema ha +0 e -0)
  3. il complemento a due fa come nel passaggio 2 e aggiunge 1 (elimina +/- 0)

Mi manca qualcos'altro?

Le mie domande:

  1. quali architetture supportano quale sistema? Qual è il più comune in questi giorni (1 "o 2" s complemento)?
  2. in che senso dovremmo considerare questi sistemi quando programmiamo in C? Ha senso solo nel mondo embedded?

Grazie in anticipo!

risposte:

4 per risposta № 1

Oggi la maggior parte dei sistemi utilizza il complemento a due, poiché consente al computer di eseguire la stessa esatta operazione di addizione / sottrazione senza preoccuparsi del particolare segno del numero.

Quando stai programmando, l'aritmetica funzionaindipendentemente dal sistema utilizzato - la gamma dei tipi di dati è definita dalla lingua, quindi se dice che un tipo funzionerà nell'intervallo -2 ^ 31 a + 2 ^ 31 - 1, funzionerà indipendentemente dal notazione: bisogna fare attenzione quando si lavora con singoli bit o cambiamenti di bit, tuttavia - quelli non si comportano come il potere di due aritmetici nei sistemi a complemento di non-due (anche se non si ha molta probabilità di incontrarli sistemi, e probabilmente non lo faranno mai, se si sta solo lavorando con PC).


0 per risposta № 2

L'unico vantaggio della notazione "complemento"per i numeri interi è che consente di eseguire conversioni da e verso il modulo di grandezza del segno senza una catena di trasporto. Costruire un computer con una serie di luci lampeggianti che mostrano il valore di ciascun registro in forma di magnitudine di segno sarà molto più conveniente se i registri usano la forma di "complemento" di quelli che usano due "complementi a forma di s". i latch di archiviazione separati per i blinkenlights ei registri della CPU, il modo più semplice per sistemare le cose sarebbe di avere un circuito che traduce due "complemento s in un" complemento s o modulo di magnitudine di segno, e quindi fare in modo che ogni registro scriva memorizza simultaneamente i due valori "s-complemento nel registro mentre aggiorna i latch blinkenlight con il valore di grandezza del segno. I circuiti di chiusura sono sufficientemente costosi, tuttavia, se i registri sono costruiti da latch discreti in ogni caso, aggiungendo alcuni circuiti all'ALU per far sì che usi quelli "-completa, e quindi alimentando le luci dai registri" reali "della CPU, potrebbe essere più economico che includere un set aggiuntivo di latch per le luci.

Negli ultimi decenni, ovviamente, ili costi relativi dei diversi elementi circuitali si sono spostati al punto che sarebbe stato assurdo far cablare le luci per riportare direttamente lo stato dei registri di una CPU, di conseguenza i vantaggi pratici che i "progetti di complemento" avrebbero potuto avere in passato sono non più applicabile.