Numeri interi positivi

nei calcolatori, tutti i dati sono rappresentati con numeri:

i numeri sono rappresentati come sequenze di zeri e uni


rappresentazione binaria

di solito i numeri si scrivono usando dieci cifre:
0, 1, 2, 3, 4, 5, 6, 7, 8 e 9

in binario, se ne usano solo due: 0 e 1

a parte questo, è lo stesso sistema


sequenza dei numeri

in decimale:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 …

metodo:

lo stesso sistema si può usare anche con meno cifre


otto cifre

sistema usato abbastanza spesso

cifre 0, 1, 2, 3, 4, 5, 6 e 7


sequenza con otto cifre

cifre 0, 1, 2, 3, 4, 5, 6 e 7

stesso sistema:

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 …

cambia solo che le cifre non finiscono con 9 ma con 7


sistema con otto cifre

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 …

ultima cifra 7

dopo 7 c'è 10

stesso metodo: dopo l'ultima cifra si mette 1 davanti


altri numeri

dopo 7 c'è 10

poi 11, 12, ecc.

dopo 17 c'è 20


numeri a tre cifre

0 1 2 3 … 6 7 10 11 … 16 17 20 21 … 76 77 100 101

sempre lo stesso sistema:

dopo 77 c'è 100


ottale ↔ decimale

sono sequenze diverse:

0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 …
0  1  2  3  4  5  6  7 10 11 12 13 14 15 16 17 20 21 …

ma i numeri che devono rappresentare sono gli stessi

11 con otto cifre = 9 con dieci cifre

16 con otto cifre = 14 con dieci cifre

ecc.


numeri in rappresentazioni diverse

la sequenza indica i numeri zero, uno, due, …

questo a prescindere dal numero di cifre

con dieci cifre il centesimo numero è 100

con otto cifre è 144


vari sistemi di uso comune

decimale
dieci cifre
ottale
otto cifre
binario
due cifre

sistema binario

usato perchè è facile realizzare circuiti che:

cifre binarie, ossia 0 e 1


sequenza in binario

stesso sistema:

con due cifre, dopo 0 e 1 le cifre sono finite

0 1 10 11 …


tre cifre

0 1 10 11 …

poi?

è finita anche la seconda cifra (dopo 1c non c'è 2c)

0 1 10 11 100 101 …


valori dei numeri

la sequenza indica sempre i numeri in ordine:

  0	zero
  1	uno
 10	due
 11	tre
100	quattro
101	cinque
110	sei
...

funziona?

si devono poter rappresentare tutti i numeri

il numero decimale 4231 è il quattromiladuecentotrentunesimo della sequenza (senza contare lo zero)

si rappresenta come il quattromiladuecentotrentunesimo della sequenza dei numeri binari (senza contare lo zero)

0	
1 		primo
10		secondo
11		terzo
100		quarto
101		quinto
…
1000010000111 	quattromiladuecentotrentunesimo

la sequenza non finisce mai, prima o poi il numero c'è


perchè non usare il sistema decimale?

è facile dal punto di vista tecnologico realizzare sistemi per memorizzare e manipolare dati rappresentati solo come zeri e uni

problema: se i dati sono in decimale, come faccio?


il programma della calcolatrice

nel calcolatore i dati sono in binario

l'utente li digita in decimale

come funziona?


conversioni

l'utente digita i numeri in decimale

il programma li converte in binario

il programma li somma in binario

il programma converte il risultato in decimale


operazioni

conversione da decimale a binario e viceversa

somme, sottrazioni, ecc. con valori in binario

per entrambe le cose:

serve la descrizione matematica di questi sistemi

uno in prima posizione

in ottale, dopo 7 c'è 10, 11, 12

questi numeri rappresentano otto, nove, dieci, ecc.

  7	sette
 10	otto	=	otto + zero
 11	nove	=	otto + uno
 12	dieci	=	otto + due
 13	undici	=	otto + tre
 14	dodici	=	otto + quattro
...

quindi: 1 in prima posizione indica 8


due in prima posizione

 14	dodici	=	otto + quattro
 15	tredici	=	otto + cinque
 16	quattordici =	otto + sei
 17	quindici =	otto + sette
 20	sedici =	otto + otto + zero =	due×otto
 21	diciassette =	otto + otto + uno =	due×otto + uno
...

uno in prima posizione è otto

due è sedici


posizione in decimale

16 è dieci più sei

24 è due per dieci più quattro


due cifre, in generale

per numeri di due cifre, in decimale:

yx = y×10 + x

in ottale:

yx = y×8 + x


tre cifre, in generale

decimale
zyx = z per cento (10×10) + y per dieci + x
ottale
zyx = z per sessantaquattro (8×8) più y per otto più x
binario
zyx = z per quattro (2×2) più y per due più x

stesso sistema, con otto o due al posto di dieci


base

numero usato al posto del dieci

binario
base=2
ottale
base=8
decimale
base=10

è il numero di cifre


valore di un numero

in base b:

zyx indica z per base al quadrato più y per base più x


più cifre

stessa cosa:

2315 in base dieci è
2×103 + 3×102 + 1×10 + 5
73512 in base otto è:
7×84 + 3×83 + 5×82 + 1×8 + 2
101011 in base due è:
1×25 + 0×24 + 1×23 + 0×22 + 1×2 + 1

regola generale

dato un numero in base qualsiasi:


formula

numero ckck-1…c1c0

base b

ckck-1…c1c0
indica
ck×bk + ck-1×bk-1 + … + c1×b1 + c0×b0

nota: b1=b e b0=1

vale per b qualsiasi: dieci, otto, due, sedici, ecc.

basta che b>1


sistemi posizionali

la cifra 2 significa varie cose a seconda della posizione:

il valore cambia a seconda della posizione

per questo si chiamano sistemi posizionali


sistemi non posizionali

esempio: numeri romani (I, II, III, IV, ecc.)

la prima I in II indica uno

la I in IV indica meno uno

stessa posizione, valore diverso = sistema non posizionale


conversioni

passaggio da una base all'altra

da decimale a binario

da binario a decimale

da binario a ottale


principio della conversione

si usa sempre la definizione di numero:

ckck-1…c1c0
indica
ck×bk + ck-1×bk-1 + … + c1×b1 + c0×b0

il valore della somma deve essere lo stesso anche se si cambia base

2×10 + 1 = 2×8 + 5 = 1×16 + 0×8 + 1×4 + 0×2 + 1×1

quindi 21 in decimale è 25 in ottale e 10101 in binario

serve un metodo


conversione verso il sistema decimale

basta usare la definizione e fare i calcoli

esempio (ovvio): conversione da decimale a decimale

il valore decimale di 3284 è:

3284 = 3    2   8  4
       1000 100 10 1

     = 3*1000 + 2*100 + 8*10 + 4*1

deriva dalla definizione


conversione da binario

stessa formula, ma le cifre si moltiplicano per 1, 2, 4, 8, ecc.

il numero binario 10110 vale:

10110 = 1  0  1  1  0
        16 8  4  2  1

      = 1*16 + 0*8 + 1*4 + 1*2 + 0*1
      = 16+4+2 = 22

in decimale: 22


da ottale a decimale

si usano le potenze di otto: 1, 8, 64, 512, 4096, ecc.

esempio: il numero ottale 42703 in decimale è:

42703 = 4    2   7  0 3 =
        4096 512 64 8 1

      = 4*4096 + 2*512 + 7*64 + 0*8 + 3*1 =
      = 17859

in decimale è 17859


altri esempi

convertire 101101 da binario a decimale
1×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20 =
32 + 0 + 8 + 4 + 0 + 1 = 45
convertire 5720 da ottale a decimale
5×83 + 7×82 + 2×81 + 0×80 =
2560 + 448 + 16 + 0 = 3024

altri esempi ancora

convertire 43012 da base cinque a decimale
4×54 + 3×53 + 0×52 + 1×51 + 2×50 =
2500 + 375 + 0 + 5 + 2 = 2882
convertire 6513 da base sette a decimale
6×73 + 5×72 + 1×71 + 3×70 =
2058 + 245 + 7 + 3 = 2313

da decimale ad altra base

si usa un metodo diverso

è sempre basato sulla definizione del valore di un numero

usa quoziente e resto

sette diviso due=quoziente tre, resto uno

in Python: 7//2 vale 3 mentre 7%2 vale 1


divisioni successive

per convertire n da decimale a binario:

finisce quando il quoziente è zero


esempio di divisioni successive

decimale 319 in binario

si prendono i resti in ordine inverso
(dal fondo alla cima)

in binario: 100111111


da decimale a ottale

stesso sistema

invece di dividere per due si divide per otto

conversione di 319 in ottale:

resti in ordine inverso: 477

questo è il numero in ottale


esercizio

numero decimale 6812

convertirlo in binario


soluzione

in binario è 1101010011100


esercizio

numero decimale 1209 in base otto


soluzione

viene 2271


esercizio

numero in base sei 4215, convertirlo in base dieci


soluzione

era da altra base a dieci

basta fare i calcoli

4×63 + 2×62 + 1×61 + 5×60 = 864 + 72 + 6 + 5 = 947

esempio

Convertire il numero decimale 92341 in base cinque:

viene 10423331


divisioni successive: perchè funziona?

punto di partenza:

  1. il valore di un numero è dato dal polinomio visto prima
  2. le cifre sono comprese fra zero e la base meno uno

divisioni successive: dimostrazione (1)

numero n da convertire in base b

=trovare le cifre ckck-1…c1c0 in base b

per definizione:

n = ck×bk + ck-1×bk-1 + … + c1×b1 + c0×b0

divisioni successive: dimostrazione (2)

n = ck×bk + ck-1×bk-1 + … + c1×b1 + c0×b0

si dividono entrambi i membri di questa equazione per b

n/b = (ck×bk + ck-1×bk-1 + … + c1×b1 + c0×b0)/b
    = ck×bk-1 + ck-1×bk-2 + … + c1 + c0/b

divisioni successive: dimostrazione (3)

n/b = ck×bk-1 + ck-1×bk-2 + … + c1 + c0/b

divisioni successive: dimostrazione (4)

n/b = ck×bk-1 + ck-1×bk-2 + … + c1 + c0/b

divisioni successive: dimostrazione (5)

n/b = ck×bk-1 + ck-1×bk-2 + … + c1 + c0/b

è il resto della divisione n/b

non finisce qui…


divisioni successive: dimostrazione (6)

n/b = ck×bk-1 + ck-1×bk-2 + … + c1 + c0/b

il quoziente di n/b è la parte intera della divisione

qui: ck×bk-1 + ck-1×bk-2 + … c1

per definizione di numero: in base b è ckck-1…c1

dividendo si ottiene c1 come resto, ecc.

ecc.


basi diverse da dieci

esempio: convertire da base cinque a base otto


esempio di conversione

numero 3421 in base cinque

convertirlo in ottale:

  1. da base cinque a decimale:
    3421 = 3 × 5×5×5 + 4 × 5×5 + 2 × 5 + 1 = 486
  2. da decimale 486 a base otto: divisioni successive:
    486/8 = 60 con resto di 6, poi 60/8=7 con resto di 4, poi 7/8 vale zero con resto di 7

il numero in ottale è 746


alcune conversioni semplici

da base due a otto o viceversa:

tre bit = una cifra ottale

questo perchè 8 = 2×2×2

per esempio, con sei cifre binarie:

d1×8+d0 =
        = c5×2×2×2×2×2 + c4×2×2×2×2 + c3×2×2×2 + c2×2×2 + c1×2 + c0
        = (c5×2×2 + c4×2 + c3 ) × 8 + (c2×2×2 + c1×2 + c0)

la prima cifra ottale d1 è c5×2×2 + c4×2 + c3

la seconda cifra ottale d2 è c2×2×2 + c1×2 + c0


da binario a ottale

in pratica: ogni tre bit sono una cifra ottale

11010111001 = 011 010 111 001
              --- --- --- ---
               3   2   7   1

            = 3271

serviva uno zero davanti per ottenre una terzina


da ottale a binario

ogni cifra ottale sono tre bit

	101 010 001 111 010
        --- --- --- --- ---
52172 =  5   2   1   7   2

      = 101 010 001 111 010
      = 101010001111010

conversioni facili, in generale

se una delle due basi è potenza n-esima dell'altra

allora n cifre sono una


da binario a esadecimale e viceversa

esadecimale = base sedici

da binario a esadecimale:

10101111001 = 0101 0111 1001
              ---- ---- ----
	        5    7    9

            = 579

da esadecimale a binario:

      0111 1001 0001
      ---- ---- ----
791 =   7    9    1 

    = 0111 1001 0001
    = 011110010001

esadecimale

finora: basi minori di dieci

il meccanismo funziona anche con basi maggiori

esadecimale: sedici cifre

servono cifre in più per dieci, undici, …

si usano A, B, C, D, E ed F


successione numeri in esadecimale

stesso sistema: prima le cifre, quando finiscono 10, ecc.

la successione dei primi numeri espressi in esadecimale:

 0	zero
 1	uno
 2	due
 3	tre
 4	quattro
 5	cinque
 6	sei
 7	sette
 8	otto
 9	nove
 A	dieci
 B	undici
 C	dodici
 D	tredici
 E	quattordici
 F	quindici
10	sedici
11	diciassette
12	diciotto
13	diciannove
14	venti
15	ventuno
...

esadecimale: conversioni

solito sistema:

A2F = 10×16×16 + 2×16 + 15 = 2607

da decimale a esadecimale:


conversioni facili

16=24

una cifra esadecimale sono quattro bit

e viceversa


generalizzazione

sistema posizionale=

le cifre rappresentano valori da 0 a b-1

funzione val(cifra) che dà il valore di ogni cifra


esempio di sistema posizionale


conversioni

♠µ¥ in decimale vale:

val(♠) × 12×12 + val(µ) × 12 + val(¥) =
11 × 12×12 + 6 × 12 + 3 =
1659

il numero decimale 1001 si converte così:

viene µ♠©


numero e numerale

numero
un valore
numerale
la sua rappresentazione

12, XII e dodici sono tre modi diversi per rappresentare lo stesso numero

sono quindi tre numerali che rappresentano lo stesso numero


addizioni

solito modo:

  2 7 5 +
1 7 5 4 =
---------
      ↓
      5+4=9
      9
    ↓
    7+5=12 (ossia 2 con riporto 1)
  1 2
  ↓
  2+7+1=10 (ossia 0 con riporto 1)
1 0
↓
1+1=2
----------
2 0 2 9

addizioni con base generica

somma di cifre nella base: 4+5=11 in ottale, ecc.


esempio: somma in ottale

  5 2 3 +
1 3 6 1 =
---------
      ↓
      3+1=4
      4
    ↓
    2+6=otto, in ottale 10
    ossia 0 con riporto di 1
  1 0
  ↓
  5+3+1=nove, in ottale 11
  ossia 1 con riporto di 1
1 1
↓
1+1=2
---------
2 1 0 4

esempio: somma in binario

  1 0 0 1 1 +
1 0 0 1 1 1 =
-------------
          ↓
          1+1=due, in binario 10
          ossia 0 con riporto 1
        1 0
        ↓
        1+1+1=tre, in binario 11
        ossia 1 con riporto 1
      1 1
      ↓
      0+1+1=due, in binario 10
      ossia 0 con riporto 1
    1 0
    ↓
    0+0+1=1
  ↓
  1+0=1
↓
1
-------------
1 1 1 0 1 0

somma con base generica

stesso sistema

si somma cifra per cifra

ma la somma va fatta nella base:


esercizio di somma

Sommare i numeri esadecimali 1F2 e BA4


soluzione

   1 F 2 +
   B A 4 =
----------
       ↓
       2+4=6 
       6
     ↓
     F+A=quindici+dieci=
     =venticinque=sedici+nove=
     19 in esadecimale (9 con riporto di 1)
   1 9
   ↓ 
   1+B+1=uno+undici+uno=tredici=
   D in esadecimale
----------
   D 9 6

esercizio di somma

sommare i numeri in base tre 2201 e 202


soluzione

  2 2 0 1 +
    2 0 2 =
-----------
        ↓
	1+2=tre=tre+0
	in base tre: 10
	cioè 0 con riporto di 1
      1 0
      ↓
      0+0+1=1
      1
    ↓
    2+2=quattro=tre+uno
    in base tre 11
    cioè 1 con riporto di 1
  1 1
  ↓
  2+0+1=tre=tre+zero
  in base tre 10
  cioè 0 con riporto di 1
1 0
↓
0+0+1=1
-----------
1 0 1 1 0

esercizio di somma

sommare i numeri binari 11011001 e 11110000111


soluzione

        1 1 0 1 1 0 0 1 +
  1 1 1 1 0 0 0 0 1 1 1 =
-------------------------
                      ↓
                      1+1=0 con riporto 1
                    ↓
                    0+1+1=0 con riporto 1
                  ↓
                  0+1+1=0 con riporto 1
                ↓
                1+0+1=0 con riporto 1
              ↓
              1+0+1=0 con riporto 1
            ↓
            0+0+1=1
          ↓
          1+0=1
        ↓
        1+1=0 con riporto 1
      ↓
      0+1+1=0 con riporto 1
    ↓
    0+1+1=0 con riporto 1
  ↓
  0+1+1=0 con riporto 1
↓
0+0+1=1
-------------------------
1 0 0 0 0 1 1 0 0 0 0 0

dimostrazione del metodo di somma

punti di partenza:

  1. due cifre nella stessa posizione sono moltiplicate per la stessa potenza della base
  2. la somma di due cifre più uno dà al massimo riporto uno

dimostrazione del metodo di somma

somma di:

risultato:

ak-1×bk-1 + … + a0×b0 + bk-1×bk-1 + … + b0×b0 =
(ak-1+bk-1)×bk-1 + … + (a0+b0)×b0

si possono quindi sommare le cifre


dimostrazione del metodo di somma: primo riporto

a0 e b0 possono andare da 0 a b-1

la somma può superare b-1
(massimo valore per una singola cifra)

il massimo è (b-1)+(b-1)=b+(b-2)

in base b è 1c dove c è la cifra che rappresenta b-2

l'1 è il riporto


dimostrazione del metodo di somma: riporti successivi

si sommano due cifre più un eventuale riporto 1

il massimo è (b-1)+(b-1)+1=2b-1=b+(b-1)

in base b, è 1d, dove d è la cifra che rappresenta b-1

in qualsiasi base, il riporto può valere al massimo uno

dimostrazione per induzione

meccanismo usato:

si assume che il riporto precedente sia massimo uno

si dimostra che questo è massiumo uno

dimostrazioni in cui si assume un fatto per dimostrarlo in una condizione successiva si dicono dimostrazioni per induzione


riporto nel caso binario

due bit più un riporto: massimo 1+1+1=11

la singola somma è un'addizione di tre bit che produce un risultato a due bit

si vedranno circuiti in grado di produrre i due bit a partire da quei tre


numero di bit

nella maggior parte dei casi pratici, ogni numero si rappresenta con una quantità fissata di bit

esempio: 64

il risultato di una somma può avere un bit in più

addendi a 64 bit, risultato a 65 (non rappresentabile)


aumento numero di bit: esempio

addendi a otto bit:

 11010001 +
 01100001 =
-----------
100110010

risultato a nove

non un numero rappresentabile con otto bit


overflow

condizione in cui:


sottrazione

stesso metodo della base dieci

sottrazione per cifre con eventuale riporto di -1


una sottrazione in decimale

  3 2 1 -
    6 2 =
---------
      ↓
      1-2=-1, ossia 9-10
      cifra 9 e riporto -1
   -1 9
    ↓
    2-6-1=-5, ossia 5-10
    cifra 5 e riporto -1
 -1 5
  ↓
  3-1=2
  2
---------
  2 5 9

9-10 = risultato è 9, riporto -1

(-10 all'ultima cifra = -1 alla penultima, ecc.)


una sottrazione in ottale

  2 7 1 -
  1 3 6 =
---------
      ↓
      1-6=-5=3-8
      cifra 3 e riporto -1
   -1 3
    ↓
    7-3-1=3
    3
  ↓
  2-1=1
  1
---------
  1 3 3

perchè 3-8?

perchè il riporto è -1?


riporti nelle sottrazioni in ottale

base 8

1-6 viene -5, ma non esiste una cifra per -5

ma -5 è uguale a (-1)×8+3

simile a 1×8+3, che è 13 in ottale

(-1)×8+3 è come due cifre -1 e 3

-1 è il riporto
3 la cifra del risultato


peso delle cifre

  2 7 1 -
  1 3 6 =
---------
      ↓
      1-6=-5=3-8
      cifra 3 e riporto -1
   -1 3
    ↓
    7-3-1=3
    3
…

valori delle cifre: c2×8×8 + c1×8 + c0

un -8 all'ultima cifra vale -8

il -1 alla penultima vale (-1)×8

il -8 all'ultima cifra è -1 alla penultima

(-8 all'ultima cifra=-1 alla penultima)


sottrazione in binario

 1 1 0 0 1 0 0 -
 1 0 0 1 0 1 1 =
----------------
             ↓
             0-1=-1=1-2
	     ossia 1 con riporto di -1
           ↓
           0-1-1=-2=0-2
	   ossia 0 con riporto di -1
         ↓
         1-0-1=0
       ↓
       0-1=-1=1-2
       ossia 1 con riporto di -1
     ↓
     0-0-1=-1=1-2
     ossia 1 con riporto di -1
   ↓
   1-0-1=0
 ↓
 1-1=0
----------------
 0 0 1 1 0 0 1

-2 all'ultima cifra=-1 alla penultima, ecc.


rappresentabilità del risultato

sottrazione fra due positivi: minore del primo

no overflow possibile

il risultato può essere minore di zero

=non rappresentabile in questi sistemi per i positivi

underflow=valore troppo basso per essere rappresentato


moltiplicazione

come in decimale:


moltiplicazione in ottale

   412 ×
    52 =
------
  1024 ← 412 × 2
         (tenendo conto che 4×2=10)
 2462  ← 412 × 5
         (tenendo conto che 5×2=12 e 5×4=24)
------
 25644 ← somma

moltiplicazione in binario

ogni cifra può essere solo 0 o 1

primo × cifra-del-secondo=

i singoli prodotti o sono il primo operando oppure valgono zero


moltiplicazione in binario: esempio

    10111 ×
     1101 =
---------
    10111 ← 10111×1
   00000  ← 10111×0
  10111   ← 10111×1
 10111    ← 10111×1
---------
100101011

ogni prodotto è zero oppure il primo operando spostato a sinistra

shift: translare un numero
(detto anche spostamento)

shifter: circuiti che realizzano uno shift


moltiplicazione per una potenza della base

è uguale a uno shift

esempio: moltiplicazione per due (10) in binario:

 110001 ×
     10 =
--------
 000000 ← 110010 × 0
110001  ← 110010 × 1
--------
1100010

stesso numero spostato a sinistra di una posizione


moltiplicazione per una potenza della base

moltiplicare per otto (1000):

   110001 ×
     1000 =
----------
   000000 ← 110010 × 0
  000000  ← 110010 × 0
 000000   ← 110010 × 0
110001    ← 110010 × 1
----------
110001000

stesso numero spostato a sinistra di tre posizioni


moltiplicazione per una potenza della base

in generale: n-esima potenza della base=10...0 con n zeri

l'unico prodotto intermedio è quello generato da 1

è il numero di partenza spostato di n posizioni


moltiplicazione per potenze di due

è come spostare i bit

in Python: a<<b è a spostato di b posizioni
è come aggiungere b zeri in fondo

print 1<<4
print 5<<2

stampa 16 e 20:

print 1<<4
1 con quattro zeri ⇒ 10000 = 16
print 5<<2
5 = 101 con due zeri ⇒ 10100 = 16+4 = 20

divisioni per potenze di due

spostamento a destra dei bit

in Python: a>>b è a spostato a destra di b posizioni

i bit che "escono" si perdono


massimo numero rappresentabile

in hardware, i numeri si rappresentano con un numero prefissato di bit

esempio: 64

massimo numero senza segno rappresentabile: sessantaquattro uni

1111111111111111111111111111111111111111111111111111111111111111 → 1×263 + 1×262 + 1×261 + 1×260 + 1×259 + 1×258 + 1×257 + 1×256 + 1×255 + 1×254 + 1×253 + 1×252 + 1×251 + 1×250 + 1×249 + 1×248 + 1×247 + 1×246 + 1×245 + 1×244 + 1×243 + 1×242 + 1×241 + 1×240 + 1×239 + 1×238 + 1×237 + 1×236 + 1×235 + 1×234 + 1×233 + 1×232 + 1×231 + 1×230 + 1×229 + 1×228 + 1×227 + 1×226 + 1×225 + 1×224 + 1×223 + 1×222 + 1×221 + 1×220 + 1×219 + 1×218 + 1×217 + 1×216 + 1×215 + 1×214 + 1×213 + 1×212 + 1×211 + 1×210 + 1×29 + 1×28 + 1×27 + 1×26 + 1×25 + 1×24 + 1×23 + 1×22 + 1×21 + 1×20 = 9223372036854775808 + 4611686018427387904 + 2305843009213693952 + 1152921504606846976 + 576460752303423488 + 288230376151711744 + 144115188075855872 + 72057594037927936 + 36028797018963968 + 18014398509481984 + 9007199254740992 + 4503599627370496 + 2251799813685248 + 1125899906842624 + 562949953421312 + 281474976710656 + 140737488355328 + 70368744177664 + 35184372088832 + 17592186044416 + 8796093022208 + 4398046511104 + 2199023255552 + 1099511627776 + 549755813888 + 274877906944 + 137438953472 + 68719476736 + 34359738368 + 17179869184 + 8589934592 + 4294967296 + 2147483648 + 1073741824 + 536870912 + 268435456 + 134217728 + 67108864 + 33554432 + 16777216 + 8388608 + 4194304 + 2097152 + 1048576 + 524288 + 262144 + 131072 + 65536 + 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 18446744073709551615

massimo numero con n bit

1×2n-1 + 1×2n-2 + … + 1×21 + 1×20 = 2n-1

il successivo di 11…11 è 100…00

è il primo numero non rappresentabile: 2n

massimo rappresentabile: questo meno uno


64 bit bastano?

massimo rappresentabile: 18446744073709551615

esistono applicazioni che usano valori più grandi

si possono usare due numeri a 64 bit A e B per rappresentarne uno a 128

la coppia ⟨A,B⟩ rappresenta A×264 + B


esercizio

Convertire i due numeri decimali 591 e 211 in binario. Effettuare poi la somma in binario. Assumendo sedici bit, controllare se si è verificato l'overflow. In caso contrario, riconvertire il risultato in decimale, verificando se il risultato è effettivamente 802.


conversione 591

resti in ordine inverso: 1001001111


conversione 211

resti in ordine inverso: 11010011


somma dei due numeri

 11 11111     ← riporti
1001001111 +
  11010011 =
------------
1100100010

rientra in sedici bit → no overflow


conversione 1100100010

1×29 + 1×28 + 0×27 + 0×26 + 1×25 + 0×24 + 0×23 + 0×22 + 1×21 + 0×20 = 512 + 256 + 0 + 0 + 32 + 0 + 0 + 0 + 2 + 0 = 802

esercizio

Convertire il numero decimale 53 e quello esadecimale F1 in binario. Moltipicare i due numeri binari così ottenuti e convertire il risultato in ottale.


conversione 52

resti dall'ultimo al primo: 110100


conversione F1

si potrebbe convertire prima in decimale e poi in binario

ma: 16 = 24

una cifra esadecimale = quattro bit

F1 =  F    1    = 11110001
     ---- ----
     1111 0001

moltiplicazione

il primo numero ha bit meno che valgono uno del secondo

conviene fare secondo per primo (meno addendi)

      11110001 ×
        110100 =
----------------
    11110001
  11110001
 11110001
----------------
11000011110100

conversione in ottale

conversione a dieci e poi a otto

oppure: tre bit = una cifra ottale

11000011110100 = 011 000 011 110 100
                 --- --- --- --- ---
		  3   0   3   6   4

               = 30364