Codifica dei numeri interi con segno in base 2: Ci siamo occupati fino ad adesso di come il computer (base 2) rappresenta i numeri interi Occupiamoci ora di rappresentare i numeri interi col segno: Per rappresentare numeri con segno, occorre utilizzare un bit per definire il segno del numero Modulo e segno Complemento a 1 (CA1) Complemento a 2 (CA2) 1
Modulo e segno SEGNO MODULO (valore) il segno si indica nel bit più significativo 1 equivale a - 0 equivale a + il valore con il resto dei bit rispetto ai numeri interi sacrifichiamo un bit Essendo il bit più significativo quello del segno per semplicità decidiamo prima il numero dei bit che utilizziamo esempio con 4 bit abbiamo 1 bit per il segno e 3 bit per il modulo con 3 bit rappresentiamo da 0 a 2 3-1 ossia da 0 a 7 dunque da -7 a +7 in generale con n bit da (2 n-1-1) a + (2 n-1-1) Valore decimale Valore binario 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-0 1000-1 1001-2 1010-3 1011-4 1100-5 1101-6 1110-7 1111 Come si nota lo zero ha 2 rappresentazioni Se faccio somma tra positivi e negativi il computer deve ragionare sul segno dunque occorre un circuito complicato. 2
Complemento a 1 (CA1) Anche in questo caso un bit serve per definire il segno del numero ma dal positivo al negativo si fa una semplice operazione : si invertono tutti i bit (0 diventa 1 e 1 diventa 0) esempio con 4 bit abbiamo 1 bit per il segno e 3 bit per il modulo con 3 bit rappresentiamo da 0 a 2 3-1 ossia da 0 a 7 dunque da -7 a +7 in generale con n bit da (2 n-1-1) a + (2 n-1-1) Valore decimale Valore binario 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-0 1111-1 1110-2 1101-3 1100-4 1011-5 1010-6 1001-7 1000 Come si nota lo zero ha 2 rappresentazioni Se faccio somma tra positivi e negativi il computer deve ragionare sul segno dunque occorre un circuito complicato. 3
Complemento a 2 (CA2) Anche in questo caso un bit serve per definire il segno del numero ma dal positivo al negativo si fanno 2 operazioni : si invertono tutti i bit (0 diventa 1 e 1 diventa 0) si aggiunge 1 I numeri positivi sono rappresentati (come) in modulo e segno I numeri negativi sono rappresentati in complemento a 2 =>la cifra Più significativa ha sempre valore 1 Lo zero e rappresentato come numero positivo (con una sequenza di n zeri) Il campo dei numeri rappresentabili varia da -2 n-1 a +2 n-1-1 Esempio con 4 bit rappresento da dunque da -8 a +7 dal punto di vista della matematica con n bit per i numeri negativi x si calcola 2 n -x Per sapere il valore a cui corrisponde si considera il bit del segno come -2 n 2 n -x-2 n =-x 4
Valore decimale Valore binario Operazione che si fa per il modulo 0 0000 x => 2 n- x=16-x 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-1 1110+ 16-15 = (1111) 2 ------- Il valore è 15-16=-1 1111-2 1101+ 16-2=14=(1110) 2 ------- Il valore è 15-16=-2 1110-3 1100+ 16-3=13=(1101) 2 ------- Il valore è 13-16=-3 1101-4 1011+ 16-4=12=(1100) 2 ------- Il valore è 12-16=-4 1100-5 1010+ 16-5=1(1011) 2 ------- Il valore è 11-16=-5 1011-6 1001+ 16-6=10=(1010) 2 ------- Il valore è 10-16=-6 1010-7 1000+ 16-7=9=(1001) 2 ------- Il valore è 9-16=-7 1001-8 1000 inverto 16-8=8=(1000) 2 0111+ Il valore è 8-16=-8 ------- 1000 Finalmente con questo formato lo zero ha una rappresentazione come gli altri 5
Addizione e sottrazione Utilizzando la rappresentazione in complemento a 2 n bit, addizione e sottrazione sono trattate come un unica operazione per FARE A-B si fa A + (2 n -B) PER AVERE IL VALORE CORRISPONDENTE DUE MODI SI SOTTRAE -2 n SI RIFA IL COMPLEMENTO A 2 1. Si calcola il complemento a 2 di B 2. Si somma A con il complemento a 2 di B 3. Si trascura il bit piu significativo del risultato se si eccede del numero bit utilizzati ESEMPIO 1 17-5 utilizzo 6 bit (010001) 2 -(000101) 2 = (17) 10 -(5) 10 Faccio CA2 di 5 (000101) 2 111010+ 111011 Siccome utilizzo 6 bit potevo convertire in binario 2 6-5=64-5=59 = (111011) 2 010001+ 11101 1001100 (12) N.B se utilizzo 6 bit eventuali bit eccedenti con li considero 0=> butto 7 bit 6
ESEMPIO 2 voglio calcolare 5-17 utilizzo 6 bit (000101) 2 -(010001) 2 = (5) 10 -(17) 10 Faccio CA2 di 17 (010001) 2 101110+ 101111 Siccome utilizzo 6 bit potevo convertire in binario 2 6-17=64-17=47 = (101111) 2 000101+ 10111 110100 32+16+4 = 52 Il numero è pertanto 52-2 6 =52-64 = (-12) 10 Un altro modo per vedere a quale numero negativo (bit più significativo=1) corrisponde è è rifare complemento a 2: A = CA2(CA2(A)) CA2(110100) => 001011 + 00000 001100 (12) 10 7
ESEMPIO 3 Calcolare 8-4 in binario 5 bit 8 vale in binario 01000 4 vale 00100 per fare il complemento a 2 Inverto 0 con 1 11011 Aggiungo 1 11011+ --------- 11100 16+8+4 = 28 01000+ (8) 11100= (Complemento a 2 di 4) 00100 4 (il bit eccedente lo butto) ESEMPIO 4 Calcolare 4-8 in binario 5 bit 4 vale 00100 8 vale in binario 01000 per fare il complemento a 2 pertanto 28-2 5 =28-32 = (-4) 10 Inverto 0 con 1 10111 Aggiungo 1 10111+ --------- 11000 (16+8)= 24 Pertanto 24-2 5 =24-32 = (-8) 10 00100+ (4) 11000= (Complemento a 2 di 8) 11100-4 infatti se facciamno il complemento a 2 otteniamo 4 Inverto 0 con 1 00011 Aggiungo 1 00011+ --------- 00100 Oppure faccio (11100) 2 =16+8+4=28 pertanto 28-2 5 =28-32 = (-4) 10 8