• Non ci sono risultati.

Esercitazioni su rappresentazione dei numeri e aritmetica dei calcolatori"

N/A
N/A
Protected

Academic year: 2022

Condividi "Esercitazioni su rappresentazione dei numeri e aritmetica dei calcolatori""

Copied!
37
0
0

Testo completo

(1)

Esercitazioni su rappresentazione
 dei numeri e aritmetica dei calcolatori"

slide a cura di Salvatore Orlando & Marta Simeoni "

(2)

Interi unsigned in base 2"

Si utilizza un alfabeto binario A = {0,1}, dove 0 corrisponde al numero zero, e 1 corrisponde al numero uno


"dn-1...d1d0 con di di ∈ {0,1}"

Qual è il valore rappresentato ?"

Quanti e quali numeri sono rappresentabili su n bit? 


N = dn-1• 2n-1 + .... + d1• 21 + d0• 20

Con sequenze di n bit sono rappresentabili 2n numeri naturali (da 0 a 2n-1)

00….00 = 0 00….01 = 1 00….10 = 2

01….11 = 2n-1- 1 10….00 = 2n-1

(3)

Interi unsigned in base 2"

I seguenti numeri naturali sono rappresentabili usando il numero di bit specificato ?"

2010 su 5 bit ? "

6410 su 6 bit ? "

50010 su 9 bit ? "

102510 su 10 bit ? "

SI SI NO NO

Ricorda che:

20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 ....

(4)

Conversione binario-decimale"

Esercizio: 1110101

2

= ???

10 "

1·2

6

+ 1·2

5

+ 1·2

4

+ 0·2

3

+ 1·2

2

+ 0·2

1

+ 1·2

0

= 64 + 32 + 16 + 0 + 4 + 0 + 1

Soluzione: 1110101

2

= 117

10

(5)

Conversione decimale-binario"

Esercizio: 100

10

= ???

2 "

100 : 2 = 50 resto 0 50 : 2 = 25 resto 0 25 : 2 = 12 resto 1 12 : 2 = 6 resto 0

6 : 2 = 3 resto 0 3 : 2 = 1 resto 1 1 : 2 = 0 resto 1

Soluzione: 100

10

= 1100100

2

(6)

Conversione dec-bin: metodo più pratico

Scriviamo direttamente il numero decimale come somma di potenze di 2. Per far questo, sottraiamo via via le potenze di 2, a partire dalle più significative. "

Esercizio: 123

10

= ???

2

"

Ricorda che:

20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512

123 - 64 = 59 ==>

26

59 - 32 = 27 ==>

25

27 - 16 = 11 ==>

24

11 - 8 = 3 ==>

23

3 - 2 = 1 ==>

21

1 - 1 = 0 ==>

20

Allora 123

10

=

26

+

25

+ 2

4

+

23

+

21

+

20

(7)

Conversione binario-ottale e viceversa"

Esercizio: 10101111

2

= ???

8

"

Esercizio: 635

8

= ???

2

"

10 101 111

2 5 7

Soluzione: 10101111

2

= 257

8

6 3 5

110 011 101 Soluzione: 635

8

= 110011101

8

(8)

Base 16"

Quali dei seguenti numeri esadecimali sono numeri sono corretti?

"

BED CAR 938 DEAD BEBE A129 ACI

DECADE BAG

DAD

4H3

(9)

Conversione binario-esadecimale e viceversa"

Esercizio: 1011111011012 = ???16"

Esercizio: A3C916 = ???2"

Ricorda che:

110 = 116 = 00012 210 = 216 = 00102 ...

910 = 916 = 10012 1010 = A16 = 10102 1110 = B16 = 10112 1210 = C16 = 11002 1310 = D16 = 11012 1410 = E16 = 11102 1510 = F16 = 11112 1011 1110 1101

B E D

A 3 C 9 1010 0011 1100 1001

Soluzione: 101111101101

2

= BED

16

= 3053

10

Soluzione: A3C9

16

= 1010001111001001

2

= 41929

10

(10)

Interi signed in complemento a 2"

Come si riconosce un numero positivo da uno negativo?"

–  Positivo ⇒ bit più significativo 0"

–  Negativo ⇒ bit più significativo 1"

Su n bit sono rappresentabili 2n interi unsigned (da 0 a 2n

-1

)"

Sempre su n bit, quanti interi signed in complemento a 2 ?"

0...00 = 0 0...01 = 1 ...

01...11 = 2n-1-1 (massimo pos.) 10...00 = -2n-1 (minimo neg.) ...

11...11 = -1

in totale sempre

2

n

numeri

(11)

Interi signed in complemento a 2"

Dato N>0, il numero -N si rappresenta su n bit con il numero unsigned 2n - N

-1 ⇒ 2n - 1 (1...1) - 2n-1 ⇒ 2n - 2n-1 = 2n-1 (10...0)

Data la rappresentazione di un numero negativo in complemento a due su n bit, il valore corrispondente si determina assegnando

- peso negativo al bit di segno (-2n-1) - peso positivo a tutti gli altri bit

Esempio su 5 bit:

10011 = -24 + 21 + 20 = -13

(12)

Complemento a 2: cambio di segno"

Esercizio: Rappresentare -3510 in complemento a 2 su 8 bit"

00100011

2

= +35

10

11011100 + 1 = ---

11011101

Complemento a uno

Soluzione: -35

10

= 11011101

2

(13)

Complemento a 2: cambio di segno"

Esercizio: Rappresentare -35 in complemento a 2 su 8 bit"

00100011

2

= +35

10

11011101

2

Inverti (complementa a 1) tutti i bit a

sinistra del bit “1” meno significativo

(14)

Complemento a 2: cambio di segno"

Esercizio: Quale numero decimale rappresenta il seguente numero binario in complemento a due? "

1111 1111 1111 1111 1111 1110 0000 1100

2

0000 0000 0000 0000 0000 0001 1111 0100

2

= 2

2

+ 2

4

+ 2

5

+ 2

6

+ 2

7

+ 2

8

= 500

10

Soluzione: il numero è -500

10

(15)

Complemento a 2: somma e sottrazione"

Esercizio: eseguire 5310 - 3510 in complemento a due su 8 bit"

35

10

= 00100011

2

complementando: - 35

10

= 11011101

2

11111101

53

10

- 53

10

+ 00110101

2

+ 35

10

= (-35)

10

=

11011101

2

= _______ ⇒ _________ ⇒________

18

10

18

10

(100010010

2

) mod 2

8

00010010

2

= 18

10

(16)

Complemento a 2: somma e sottrazione"

Esercizio: eseguire 1510 - 3810 in complemento a due su 8 bit"

38

10

= 00100110

2

complementando: - 38

10

= 11011010

2

00011110

15

10

- 15

10

+ 00001111

2

+ 38

10

= (-38)

10

=

11011010

2

= _______ ⇒ _________ ⇒________

-23

10

-23

10

(011101001

2

) mod 2

8

00010111

2

= 23

10

(17)

Overflow"

In quali dei seguenti casi si può ottenere overflow?"

–  somma di due numeri con segno concorde? "

–  somma di due numeri con segno discorde? "

–  sottrazione di due numeri con segno concorde? "

–  sottrazione di due numeri con segno discorde? "

SI"

NO"

NO"

SI"

(18)

Come scoprire lʼoverflow"

Primo caso: "

somma algebrica di due numeri positivi A e B. Si ha overflow se A +B>=2n-1, ovvero se A+B non può essere rappresentata su n bit in complemento a due."

Esempi: 


A=01111 B=00001 (OVERFLOW ⇒ due ultimi riporti discordi)


A=01100 B=00001 (NON OVERFLOW ⇒ due ultimi riporti concordi)


01 00

01111+ 01100+

00001= 00001=

10000 01101

(19)

Come scoprire lʼoverflow"

Secondo caso: "

somma algebrica di due numeri negativi A e B. Si ha overflow se |A|

+|B|>2n-1, ovvero se |A|+|B| non può essere rappresentata su n bit in complemento a due."

Esempi:

A=10100 B=10101 (OVERFLOW ⇒ due ultimi riporti discordi)


A=10111 B=11101 (NON OVERFLOW ⇒ due ultimi riporti concordi) 


10 11

10100+ 10111+

10101= 11101=

01001 10100

(20)

Esercizio"

Considerate i numeri esadecimali x1 = 7A x2 = 13 x3 = FF 
 x4 = C1 x5 = 84 "

Scrivere i cinque numeri in codice binario a 8 bit"

Interpretare il codice binario in complemento a due ed eseguire le operazioni 


x

1

- x

2

; x

3

+ x

4

; x

4

+ x

5

; x

4

- x

1

x1 = 0111 1010 x2 = 0001 0011 x3 = 1111 1111 x4 = 1100 0001 x5 = 1000 0100

11111000 x1 01111010 +

-x 11101101 =

(21)

Esercizio (continua)"

11111111 x3 11111111 +

x4 11000001 = ___________

(111000000) mod 28 = 11000000 overflow?

10000000 x4 11000001 +

x5 10000100 = ___________

(101000101) mod 28 = 01000101 overflow?

10000000 x4 11000001 + -x1 10000110 = ___________

(101000111) mod 28 = 01000111 overflow?

(22)

Esercizio - caso particolare"

Si ricorda che lʼopposto del numero negativo più piccolo su n bit non può essere rappresentato in complemento a due"

–  codifica non simmetrica"

Supponiamo quindi:"

–  di lavorare con rappresentazioni in complemento a due su 3 bit"

–  di dover effettuare la sottrazione x-y"

dove y=1002 è il minimo numero rappresentabile (y=-410)"

Esercizio: calcolare x-y usando il solito algoritmo, dove x=0012"

000 "

X 001 +"

-Y 100 "

______"

(0101) mod 23 = 101 OVERFLOW, anche se "

Il complemento a due non ha effetto

(23)

Esercizio - caso particolare (continua)"

Esercizio

: calcolare

x-y

, dove

x=111

2 "

–  poiché

x=111

2 allora x = -110"

–  non dovremmo avere overflow, poiché vogliamo effettuare la somma algebrica di due numeri con segno discorde"

–  il risultato da ottenere è

x-y=-1

10

- (-4

10

) = 3

10"

100 "

X 111 +"

-Y 100 "

______"

(1011) mod 23 = 011 = 310 NO OVERFLOW , anche"

" " " " " se riporti discordi !!"

Abbiamo infatti sottratto un numero negativo da un numero negativo ⇒ in questo caso non si può verificare overflow"

corretto

Il complemento a due non ha effetto

(24)

Procedura generale per determinare lʼOVERFLOW"

Operazione Segno 1

o

operando

Segno 2

o

operando

Segno atteso Somma

Somma Somma Somma

+ + -

- -

+

- qualsiasi qualsiasi

-

+ +

Sottrazione Sottrazione Sottrazione

+ +

- +

- +

-

+ qualsiasi

Solo in questi"

casi si può "

verificare un "

OVERFLOW."

Possiamo "

controllarlo"

confrontando"

il bit di segno del "

risultato con il "

segno atteso."

Alla luce dellʼesempio precedente, guardare solo ai due ultimi riporti per controllare lʼOVERFLOW potrebbe quindi portare a risultati erronei"

(25)

Numeri con la virgola (virgola fissa)"

Data una base B, si assegnano: "

n cifre per rappresentare la parte intera"

m cifre per rappresentare la parte frazionaria"

In base B=2, abbiamo quindi m+n bit per parte intera e frazionazia"

m n"

Esempio:"

d

n-1

...d

1

d

0

. d

-1

...d

-m


Qual è il numero rappresentato in base B?"

N = d

n-1

• B

n-1

+ .... + d

1

• B

1

+ d

0

• B

0

+ d

-1

• B

-1

+ ... + d

-m

• B

-m

(26)

Virgola fissa"

Esercizio: 23.625

10

= ???

2

"

(usare la rappresentazione in virgola fissa con n=8, m=8)"

Conversione parte intera:

23 : 2 = 11 resto 1 11 : 2 = 5 resto 1 5 : 2 = 2 resto 1 2 : 2 = 1 resto 0 1 : 2 = 0 resto 1

Conversione parte frazionaria:

0.625 x 2 = 1.25 parte intera 1 0.25 x 2 = 0.50 parte intera 0 0.50 x 2 = 1 parte intera 1

Soluzione: 23.625 = 00010111.10100000

(27)

Numeri con virgola mobile"

Un numero reale R può essere scritto in base B come "

R = ± m • B

e
 m = mantissa 


e = esponente
 B = base"

Esempi con B = 10"

–  R1 = 3.1569 x 103"

–  R2 = 2054.00035 x 10-6"

–  R3 = 0.1635 x 102"

–  R4 = 0.0091 x 10-12"

Notazione scientifica: m = 0 . d-1...d-k "

Notazione scientifica normalizzata: m = d0 . d-1...d-k con d0 ≠ 0"

(28)

Numeri binari in virgola mobile"

Rappresentando mantissa ed esponente in binario in notazione scientifica normalizzata si ottengono numeri del tipo:"

" ±1.xx…x • 2yy...y!

Si osservi che:"

Spostare la virgola (punto) a destra di n bit significa decrementare di n "

lʼesponente"

es: 0.01 • 23 = 1.0 •21 "

Infatti 1 • 2-2 • 23 = 1 • 21"

Spostare la virgola (punto) a sinistra di n bit significa incrementare di n!

lʼesponente "

es: 100.011 • 23 = 1.00011 • 25 "

(29)

Numeri FP"

Esercizio: 10

10

= ???

2

FP"

Esercizio: 151.25

10

= ???

2

FP"

10

10

= 1010

2

= 1010.0

2

• 20

= 1.01

• 23

151

10

= 128 + 16 + 4 + 2 + 1 = 10010111

2

0.25

10

x 2 = 0.50

10

parte intera 0

0.50

10

x 2 = 1

10

parte intera 1 0.25

10

= 0.01

2

Quindi = 151.25

10

= 10010111.01

2

= 1.001011101

2

• 27

(30)

Numeri FP"

Una volta fissato il numero di bit totali per la rappresentazione dei numeri razionali rimane da decidere:"

- Quanti bit assegnare per la mantissa ?"

(maggiore è il numero di bit e maggiore è lʼaccuratezza con cui"

si riescono a rappresentare i numeri)"

- Quanti bit assegnare per lʼesponente ?"

(aumentando i bit si aumenta lʼintervallo dei numeri rappresentabili)"

OVERFLOW: si ha quando lʼesponente positivo è troppo grande "

per poter essere rappresentato con il numero di bit"

assegnato allʼesponente "

UNDERFLOW: si ha quando lʼesponente negativo è troppo grande"

(in valore assoluto) per poter essere rappresentato"

(31)

Standard IEEE754: Singola precisione (32 bit) "

Lʼintervallo di valori (decimali) rappresentabili è ± ~10-44.85 -- ~1038.53"

Standard IEEE754: Doppia precisione (64 bit)"

Lʼintervallo di valori (decimali) rappresentabili è ± ~10-323.3 -- ~10308.3!

Numeri FP in standard IEEE754"

(32)

Esempio: scrivere -10. 62510 in notazione floating point, usando lo standard IEEE754 in singola precisione"

Standard IEEE754: Esempio"

- 10.62510 = - (10 + 0.5 +0.125) = - (23 + 21 + 1/2 + 1/8) = "

"= - 1010. 1012 = - 1. 010101 • 23 = "

"= (-1)1 • (1 + 0.010101) • 23"

Aggiungendo allʼesponente la polarizzazione il numero diventa: "

(-1)1 • (1 + 0.010101) • 2(3+127)"

(33)

Esempio: Quale numero decimale rappresenta la seguente sequenza di bit, letta secondo lo standard IEEE754?"

Standard IEEE754: Esempio"

esponente: 100011012 = 128+8+4+1=14110"

mantissa: 1+0.100112 = 1 + 0.5 + 0.0625 + 0.03125 = 1.5937510"

Quindi il numero è: 1.5937510 • 2(141 - 127) = 1.5937510 • 214"

oppure:"

1,10011 * 214 = 110011000000000 = 16384+8192+1024+512 = 26112"

(34)

Somma di numeri FP"

Shift Somma Normalizzazione

Arrotondamento

(35)

Esercizio: Dati i due numeri esadecimali A=C3160000 e B=42F80000"

1.  tradurre i numeri in binario"

2.  interpretare le sequenze di bit ottenuti come numeri FP espressi secondo lo standard IEEE754 in singola precisione "

3.  eseguirne poi la somma specificando tutti i passaggi"

4.  rappresentare il risultato ottenuto in esadecimale"

Somma di numeri FP con standard IEEE754"

Soluzione:"

1. Traduzione in binario"

A = 1100 0011 0001 0110 0000 0000 0000 0000 B = 0100 0010 1111 1000 0000 0000 0000 0000 2. Interpretazione di A e B come numeri FP:"

A = 1 10000110 00101100000000000000000 B = 0 10000101 11110000000000000000000 cioè:"

A = (-1)1 • 1.001011 • 210000110 = (-1)1 • 1.001011 • 201111111 + 111"

B = (-1)0 • 1.1111 • 210000101 = (-1)0 1.1111 201111111 + 110"

(36)

3. Somma"

  lʼesponente di A è 27 mentre quello di B è 26. Allineando B si ottiene:"

A = 1.001011 B = 0.111110"

  A è negativo e quindi eseguo il complemento a due aggiungendo un bit per il segno"

A = 10.110101 B = 00.111110"

  somma delle mantisse"

A = 10.110101 +"

B = 00.111110"

---"

C = 11.110011 è un numero negativo il cui valore assoluto è 0.001101 ""

Somma di numeri FP con standard IEEE754"

(37)

  normalizzazione"

C = (-1)1 • 0.001101 • 210000110 = (-1)1 • 1.101 • 201111111 + 100"

e quindi"

C = 1 10000011 10100000000000000000000

= 1100 0001 1101 0000 0000 0000 0000 0000 4. Rappresentazione di C in esadecimale"

C = C1D00000"

Somma di numeri FP con standard IEEE754"

Riferimenti

Documenti correlati

Il numero di bit necessari per rappresentare un certo numero nel sistema binario è minore o al più eguale del numero di bit necessari per rappresentare lo stesso numero in

Per rappresentare un numero razionale in un calcolatore elettronico in virgola fissa si riservano un numero fisso di bit per parte intera (il primo bit indica il segno)

Una frazione, ridotta ai minimi termini, genera un numero periodico semplice se il denominatore scomposto in fattori primi, contiene solo fattori primi diversi

Se si sommano due numeri negativi, non è possibile ottenere come risultato un numero positivo, e quindi l’operazione

Rappresentazione dei numeri ”floating point”.

Quando la divisione non è possibile perché non esiste un numero naturale che moltiplicato per il divisore dia per risultato il dividendo si ha una divisione con quoziente

Sono i numeri che possono essere trasformati in frazione.. CASO PARTICOLARE:

Quindi dopo la prima ripetizione dei resti si presenteranno anche i quozienti ripetuti nello stesso ordine, dando origine