> For the complete documentation index, see [llms.txt](https://checksound.gitbook.io/tecnologie1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://checksound.gitbook.io/tecnologie1/rappresentazione-dei-numeri.md).

# Rappresentazione dei numeri

### SISTEMA POSIZIONALE DECIMALE

Come rappresentare un numero naturale?

* Rappresentazione decimale posizionale
  * si utilizzano 10 cifre decimali (0, 1, ......, 9): la base è 10
  * posizionale: il significato di ogni cifra dipende dalla sua posizione relativa
  * le posizioni si contano da destra a sinistra partendo da 0

Mettiamo ad esempio il numero 1919 in forma polinomiale:

```
1919 = 1 * 10^3 + 9 * 10^2 + 1 * 10^1 + 9 * 10^0 
```

Il carattere `^` rappresenta l'elevamento a potenza, esempio `2^3`, vuol dire, 2 elevato alla terza, 2 \* 2 \* 2, quindi il valore 8.

#### Esercizi

SCRIVERE I SEGUENTI NUMERI DECIMALI evidenziando le POTENZE (quindi in forma polinomiale):

es 14 diventa uguale a  1 \* 10 ^ 1 + 4 \* 10 ^ 0

Ora:

543 = ............................................

1435 = 1 \* 10 ^ 3 + 4 \* 10 ^ 2 + 3 \* 10 ^ 1 \* 5 \* 10 ^ 0

809 987 = ............................................

### Rappresentazione dei numeri naturali

In generale: numero di `n` cifre in base `b`:

![](/files/-LwSMasBL1xbE3dDaRcK)

Le rappresentazioni utilizzate nel campo dell'informatica, sono:

* Rappresentazione **binaria**
  * base 2 (b = 2)
  * le cifre (binarie) sono: 0 e 1
* Rappresentazione **ottale**
  * base 8 (b = 8)
  * le cifre (ottali) sono: 0, 1,. . . , 7
* Rappresentazione **esadecimale**
  * base 16 (b = 16)&#x20;
  * le cifre (esadecimali) sono: 0,1,. . . , 9, A, B, C, D, E, F

Ora le vediamo una ad una.

### Sistema BINARIO&#x20;

In analogia al sistema decimale, le cifre del sistema binario, 0 e 1, assumono un valore posizionale nella scrittura del numero binario con riferimento alle potenze di 2, anziché alle potenze di 10.

Le potenze di 2 con esponente da 0 a 10 sono:

<table data-header-hidden><thead><tr><th width="88">2^10</th><th width="75.199951171875">2^9</th><th width="69.5999755859375">2^8</th><th width="67.20001220703125">2^7</th><th width="67.20001220703125">2^6</th><th width="68">2^5</th><th width="63.2000732421875">2^4</th><th width="68.800048828125">2^3</th><th width="57.5999755859375">2^2</th><th width="68.800048828125">2^1</th><th>2^0</th></tr></thead><tbody><tr><td>2^10</td><td>2^9</td><td>2^8</td><td>2^7</td><td>2^6</td><td>2^5</td><td>2^4</td><td>2^3</td><td>2^2</td><td>2^1</td><td>2^0</td></tr><tr><td>1024</td><td>512</td><td>256</td><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr></tbody></table>

Quindi il numero binario 1001 corrisponde al numero decimale 9, perché

<table data-header-hidden><thead><tr><th width="138.4000244140625">Potenze</th><th width="78.4000244140625">2^3</th><th width="78.4000244140625">2^2</th><th width="75.7999267578125">2^1</th><th width="98.199951171875">2^0</th><th></th></tr></thead><tbody><tr><td><strong>Potenze</strong></td><td>2^3</td><td>2^2</td><td>2^1</td><td>2^0</td><td></td></tr><tr><td><strong>Moltiplicatore</strong></td><td><strong>1</strong></td><td><strong>0</strong></td><td><strong>0</strong></td><td><strong>1</strong></td><td></td></tr><tr><td><strong>Addendi</strong></td><td>8</td><td>+ 0</td><td>+ 0</td><td>+ 1</td><td> = <strong>9</strong></td></tr></tbody></table>

Se scrivo il numero 123 dicendo che è un numero binario, è corretto? .....................................

RISPOSTA: No perché un numero binario ha solo due possibili valori per cifra, 0 o 1.

### Da SISTEMA BINARIO a DECIMALE

Convertire un numero in base 2 nel valore decimale (notate il pedice 2 per dire che è un numero binario)

10<sub>2</sub> = 1 \* 2^1 + 0 \* 2^0 = 2

111<sub>2</sub> = 1 \* 2^2 + 1 \* 2^1 + 1 \* 2^0

Svolgete voi la conversione in decimale dei seguenti numeri binari

1011 1111<sub>2</sub> = ...............................................

1111 1111<sub>2</sub>= ................................................

Il risultato del primo è 191 e del secondo 255, mostrate il procedimento utilizzato per giungere al risultato.

### Sistema OTTALE (base 8)

Il **sistema ottale** si chiama così perché utilizza 8 cifre nella rappresentazione dei numeri: 0, 1, 2, 3, 4, 5, 6, 7.

Il valore posizionale delle cifre dipende dalle potenze di 8. Alcune potenze dell'8:

<table data-header-hidden><thead><tr><th width="78.39996337890625">8^4</th><th width="73.4000244140625">8^3</th><th width="86">8^2</th><th width="83.79998779296875">8^1</th><th>8^0</th></tr></thead><tbody><tr><td>8^4</td><td>8^3</td><td>8^2</td><td>8^1</td><td>8^0</td></tr><tr><td>4096</td><td>512</td><td>64</td><td>8</td><td>1</td></tr></tbody></table>

Le regole per la conversione di un numero ottale in decimale sono analoghe a quelle già descritte per il sistema decimale.

Il numero 789<sub>8</sub> è un numero corretto nel sistema ottale? ..........&#x20;

Motivate la risposta.

**Risposta:** NO perché 8 e 9 non sono cifre possibili in base 8 (le 8 cifre della base 8 sono 0, 1, 2, 3, 4, 5, 6, 7). Per esprimere 8 devo dire 10<sub>8</sub> e 11<sub>8</sub> per il 9.&#x20;

### Da OTTALE a DECIMALE

Esprimere i seguenti numeri espressi in base ottale come numeri decimali.

754<sub>8</sub> = ..........................................................

1745<sub>8</sub> = ........................................................

Risposta: il primo è uguale a 492 mentre il secondo è uguale a 997, mostrare il procedimento per giungere ai risultati.

### Sistema Esadecimale (base 16)

Il sistema esadecimale utilizza 16 cifre:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Dopo la cifra 9 vengono utilizzate le lettere dell'alfabeto vino ad arrivare a F che corrisponde al valore 15.

Quindi la lettera A rappresenta il numero decimale 10 in esadecimale, B il numero 11, C il numero 12, D il numero 13, E il numero 14, F il numero 15.&#x20;

```
DECIMALE | ESADECIMALE
       0 | 0
       1 | 1
       2 | 2
       3 | 3
       4 | 4
       5 | 5
       6 | 6
       7 | 7
       8 | 8
       9 | 9
      10 | A
      11 | B
      12 | C
      13 | D
      14 | E
      15 | F 
```

Il valore delle cifre dipende dalla posizione nella scrittura del numero secondo le potenze di 16:

<table data-header-hidden><thead><tr><th width="112">16^4</th><th width="87.79998779296875">16^3</th><th width="86.79998779296875">16^2</th><th width="86">16^1</th><th>16^0</th></tr></thead><tbody><tr><td>16^4</td><td>16^3</td><td>16^2</td><td>16^1</td><td>16^0</td></tr><tr><td>65536</td><td>4096</td><td>256</td><td>16</td><td>1</td></tr></tbody></table>

La trasformazione del numero esadecimale `3AF2` in numero decimale:

<table data-header-hidden><thead><tr><th width="143.20001220703125">Potenze</th><th width="101.60003662109375">16^3</th><th width="116.79998779296875">16^2</th><th width="103.199951171875">16^1</th><th width="103.4000244140625">16^0</th><th></th></tr></thead><tbody><tr><td><strong>Potenze</strong></td><td>16^3</td><td>16^2</td><td>16^1</td><td>16^0</td><td></td></tr><tr><td><strong>Moltiplicatore</strong></td><td><strong>3</strong></td><td><strong>A</strong></td><td><strong>F</strong></td><td><strong>2</strong></td><td></td></tr><tr><td><strong>Addendi</strong></td><td>3 * 4096</td><td>10 * 256</td><td>15 * 16</td><td>2 *1</td><td> = <strong>9</strong></td></tr></tbody></table>

`FA` è un numero coretto in base 16 (esadecimale)? Motivate la risposta.

Quando c'è ambiguità sulla base del numero si mette H (*Hexadecimal*) come per significare che il numero è in base 16. Ad esempio 1234 per dire che è un numero in base 16 lo scriviamo 1234<sub>H</sub>

Verificate che 1234<sub>H</sub> vale 4660 in base decimale.

### Da ESADECIMALE a DECIMALE

Esprimere i seguenti numeri esadecimali in base 10.

F1A = ...........................................................

FF = ..............................................................

Il primo numero equivale al valore decimale 3866 mentre il secondo a 255. Motivate le soluzioni scrivendo il numero in forma polinomiale.

### PROBLEMA 1&#x20;

In un pianeta remoto, lontano anni luce dalla Terra, abitato da una popolazione aliena ha un sistema di numerazione base 4 (in effetti hanno 2 dita per mano, e comunque hanno due braccia).

Domande:

* Che cifre possibili possono avere i numeri in base 4:

Potrebbero essere 0, 1, 2, 3&#x20;

* Contate fino a 16 scrivendo il corrispettivo numero in base 4

<pre><code>MUMERO DECIMALE | NUMERO IN BASE 4
<strong>              0 --> 0
</strong>              1 --> 1
              2 --> 2
              3 --> 3
              4 --> 10
              5 --> 11
              6 --> 12
              7 --> 13
              8 --> 20
              9 --> 21
             10 --> 22
             11 --> 23
             12 --> 30
             13 --> 31
             14 --> 32
             15 --> 33
             16 --> 100
</code></pre>

### Rappresentazione dei numeri naturali - conversioni

Come convertire un numero da base 10 a base 2, 8 o 16?

Procedimento:

Abbiamo un numero N in base 10 da convertire nella base *b* (ad esempio base 2):&#x20;

1. dividere B per *b* con una divisione intera
2. il resto della divisione diventa la cifra meno significativa (la prima che resta da calcolare) del numero in base *b*&#x20;
3. se il quoziente è 0 abbiamo finito
4. se il quoziente è diverso da zero si torna al passo 1 considerando il quoziente come dividendo

### CONVERSIONE NUMERO DECIMALE a BINARIO

35<sub>10</sub> ---> 1 0 0 0 1 1<sub>2</sub>

```
 35/2  = 17 resto 1
 17/2 = 8 resto 1
  8/2 = 4 resto 0
  4/2 = 2 resto 0
  2/2 = 1 resto 0
  1/2 = 0 resto 1
  
quindi = 100011
```

### CONVERSIONE NUMERO DECIMALE in OTTALE

1602<sub>10</sub> --> 3102<sub>8</sub>

```
 1602/8 = 200 resto 2
  200/8 =  25 resto 0
   25/8 =   3 resto 1
    3/8 =   0 resto 3
	 
quindi = 3102
```

### CONVERSIONE NUMERO DECIMALE in ESADECIMALE

16034<sub>10</sub> -> 3EA2<sub>16</sub>

```
 16034/16 = 1002 resto 2 
  1002/16 = 62 resto 10 (A)
    62/16 =  3 resto 14 (E)
	   3/16 =  0 resto 3 
   
quindi = 3EA2
```

### OPERAZIONI DI ADDIZIONE TRA NUMERI IN BASE BINARIA

Data la rappresentazione binaria dei numeri, un problema interessante è quello di capire come possano essere effettuate le usuali operazioni aritmetiche su tali numeri. Nel caso della rappresentazione decimale ci è stato insegnato fin da piccoli come fare le operazioni e abbiamo quindi un procedimento automatico per eseguirle. Si pensi, ad esempio, alla operazione di addizione: il nostro procedimento automatico prevede di mettere in colonna i numeri da sommare e quindi prevede delle ben precise regole di somma con l'effettuazione di riporto ogni volta che una somma parziale supera il valore 9.

Lo stesso identico procedimento automatico di addizione può essere utilizzato anche nel caso di operazioni in base 2. L'unica differenza è che in questo caso si devono effettuare riporti nel caso in cui la somma parziale supera 1. Avremo quindi la seguente tabella di regole di somma parziale da utilizzare nell'eseguire le nostre operazioni:

```
0 + 0 = 0 con riporto 0
0 + 1 = 1 con riporto 0
1 + 0 = 1 con riporto 0
1 + 1 = 0 con riporto 1
```

Vediamo qualche semplice esempio:

```
  1 +               101 +               10110101 +
  1  =               11 =                1000110 =
------       --------------      ----------------------
 10                1000                 11111011
```

In questo modo si possono continuare ad usare gli stessi procedimenti imparati per l'aritmetica decimale per eseguire una qualunque operazione. Nel seguito non analizzeremo in dettaglio il problema, ma si può verificare che anche i procedimenti per eseguire sottrazioni o prodotti ( e tutte le altre operazioni) possono essere applicati in modo naturale.

Un aspetto importante dell'aritmetica dei calcolatori è invece il fatto che in alcuni casi si può avere un errore come risultato di un'operazione. In particolare, il problema può sorgere nel caso in cui la somma di due numeri rappresentabili con il numero di bit prescelto non sia rappresentabile e quindi abbia un errore di overflow. Supponiamo di avere numeri rappresentabili mediante 8 bit e di eseguire la seguente somma:

```
  10110101 +
  11011110 =     OVERFLOW
--------------------
 110010011 
```

&#x20;Si ha un errore di overflow in quanto il risultato della somma non è rappresentabile con 8 bit ma ne richiede almeno 9. In situazioni di questo tipo si ha un errore nell'esecuzione dell'operazione e l'arresto dell'elaborazione.

Quindi:

```
 1 +
 1 =
----
10
```

```
 1 +
 1 +
 1 =
-------
11
```

### ESEMPIO DI OPERAZIONI TRA NUMERI IN BASE 4

Un numero in base 4 ha le seguenti cifre da 0 a 3. Eseguiamo l'operazione in base 4:

```
 2 +
 2 =
----
10
```

oppure:

```
 2 +
 3 =
----
11
```

### RANGE DI RAPPRESENTAZIONE DEI NUMERI

Visto che poi la rappresentazione binaria dei numeri viene immagazzinata in memoria del PC e in modo specifico nei registri della CPU per eseguire ad esempio le operazioni, dobbiamo essere consci che i registri non composti da un numero fissato di bit.

In base allo spazio (numero di bit per immagazzinare il numero) il numero avrà un certo range, cioè il numero massimo esprimibile dipenderà dal numero di bit utilizzati per memorizzare il numero.

Ragioniamo prima con i numeri decimali e vediamo poi il ragionamento con i numeri binari, quelli realmente memorizzati in memoria.

Con tre cifre il numero massimo esprimibile è 999 cioè 10^3 -1.

In effetti le combinazioni come abbiamo già visto sono 10^3 e quindi posso esprimere numeri da 0 a 10^3 -1.

Se la base invece di essere decimale è binaria, il ragionamento è simile: con 3 bit il numero più grande esprimibile è 111 e quindi, 2 ^ 3 -1 (valore 7 in decimale).

Con 4 bit il numero massimo è 2 ^ 4 - 1 (valore 15).

La regola è che il range va da 0 a b ^ n -1 dove `b` è la base e `n` è il numero di cifre massime a disposizione.

Tipicamente nei PC i numeri sono memorizzati in byte e in base al numero di byte utilizzati questi sono i range:

| N° bit usati | VALORE MINIMO | VALORE MASSIMO                                           |
| ------------ | ------------- | -------------------------------------------------------- |
| 8            | 0             | `(2^8) - 1` (= 255)                                      |
| 16           | 0             | `(2^16) - 1` (= 65.535)                                  |
| 32           | 0             | `(2^32) - 1` (= 4.294.967.295) (9+ digits)               |
| 64           | 0             | `(2^64) - 1` (= 18.446.744.073.709.551.615) (19+ digits) |

### ALTRE CODIFICHE SUI NUMERI

In questo corso, abbiamo visto solo la codifica dei numeri naturali.&#x20;

Compito dei corsi dei prossimi anni sarà vedere come si codificano anche i numeri interi (quindi anche i numeri negativi) e i razionali (numeri in virgola mobile).

I tutti i moderni linguaggi di programmazione, hanno la possibilità di esprimere valori numerici in tutti questi tipi (interi, con o senza segno, e floating-point) e con range diversi in base al numero di byte da riservare in memoria.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://checksound.gitbook.io/tecnologie1/rappresentazione-dei-numeri.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
