Skillbook Logo
foto profilo

Skill Factory

Lista post > Competenze per programmare: i sistemi di numerazione

Competenze per programmare: i sistemi di numerazione

Gino Visciano | Skill Factory - 19/02/2023 17:01:17 | in Tutorials

Introduzione ai sistemi di numerazione

I sistemi di numerazione più usati nell'ambito informatico sono:
1) il sistema decimale a base 10 perché per comporre i numeri utilizza le cifre (0,1,2,3,4,5,6,7,8,9)
2) il sistema binario a base 2 perché per comporre i numeri utilizza le cifre (0,1) chiamate bit (binary digit)
3) il sistema ottale a base 8 perché per comporre i numeri utilizza le cifre (0,1,2,3,4,5,6,7)
4) il sistema esadecimale a base 16 perché per comporre i numeri utilizza le cifre (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Il sistema decimale (dec) è quello usato dagli uomini, che contando con le dieci dita delle mani trovano più conveniente usare dieci cifre.


Il sistema binario (bin) è quello usato dai computer, che per contare hanno solo due stati, acceso=1 o spento=0, che corrispondono a interruttori elettronici chiamati flip-flop.

Sequenze di flip-flop (interruttori elettronici a due stati spento=0 e acceso=1) permettono di scrivere i numeri in forma binaria, ovvero come sequenze di bit (0/1).
I numeri binari sono difficili da ricordare perché sono composti da troppe cifre, per questo motivo spesso vengono convertiti in ottale (ott o oct) oppure in esadecimale (esa o hex).

Ad esempio, numeri binari composti da tre bit possono essere rappresentati con una sola cifra ottale:

[Bin]   [Ott]
 000  =  0
 001  =  1
 010  =  2
 011  =  3
 100  =  4
 101  =  5
 110  =  6
 111  =  7

Se i numeri binari sono composti da quattro bit, allora conviene rappresentarli con una cifra esadecimale, come mostra l'esempio seguente:

[Bin]   [Esa]
 0000 =  0
 0001 =  1
 0010 =  2
 0011 =  3
 0100 =  4
 0101 =  5
 0110 =  6
 0111 =  7
 1000 =  8
 1001 =  9
 1010 =  A
 1011 =  B
 1100 =  C
 1101 =  D
 1110 =  E
 1111 =  F

In informatica l'unità minima di misura è il byte che corrisponde ad otto bit. Questo significa che qualunque apparecchio elettronico quando legge o scrive i numeri binari lo fa con otto bit contemporaneamente.

Per rappresentare il valore di un byte composto da otto cifre binarie (bit), bastano semplicemente due cifre esadecimali.

Ad esempio:

[Byte]    [Esa]
00000000 = 00
00000001 = 01
00001111 = 0F
00010000 = 10
11111111 = FF

Che cosa sono i numeri

Nell'ambito informatico capire che cosa sono i numeri è fondamentale per comprendere i sistemi di numerazione.

Tutti i numeri indipendentemente dal sistema di numerazione scelto indicano quantità di unità oppure di cose.

Ad esempio, il numero 9 decimale potrebbe indicare un insieme di nove auto:


Per indicare un insieme di nove auto in ottale il numero sarebbe 11, mentre in binario sarebbe 1001.

Come mai numeri diversi indicano la stessa quantità di cose?

 

Per rispondere a questa domanda dobbiamo capire che cos'è il sistema posizionale.

Il sistema posizionale

Il sistema posizionale definisce le regole da applicare per capire la quantità di unità oppure cose indicata da un numero.
Prima di tutto è importante definire il sistema di numerazione usato per scrivere i numeri, perché in questo modo possiamo conoscere il numero di cifre disponibili.
Il numero di cifre usate da un sistema di numerazione si chiama base, ad esempio la base del sistema decimae è uguale a 10 perché usa dieci cifre: 0,1,2,3,4,5,6,7,8,9.
La base del sistema esadecimale è uguale a 16 perché questo sistema usa sedici cifre: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E;F.
Attenzione le cifre A,B,C,D,E,F se le trovate in un calcolo valogno rispettivamente: 10,11,12,13,14,15.  

Per capire a quale sistema di numerazione appartiene un numero, basta indicare la base come pedice, come mostra l'esempio seguente:

910

118

10012

Tutti e tre i numeri indicano 9 unità.

La prima regola del sistema posizionale ci dice che le cifre di un numero possono indicare quantità di unità diverse in base alla loro posizione nel numero; per questo motivo si parla di sistema posizionale.

Per conoscere la quantità di unità indicata da ogni cifra in un numero, bisogna moltiplicare le cifra per un valore detto peso. I valori dei pesi cambiano in base alla posizione della cifra nel numero e in base al sistema di numerazione usato.

Per ottenere i valori dei pesi corrispondenti alle posizioni delle cifre in un numero, basta calcolare la potenza seguente:

base(posizione-1)

dove base indica il numero di cifre del sistema di numerazione usato e posizione indica dove si trova la cifra nel numero. 

Per il sistema decimale, la base è 10, quindi i pesi sono i seguenti:

Posizione Base Esponente Peso
       1           10       1-1=0           1
       2           10       2-1=1        10
       3           10       3-1=2      100
       4           10       4-1=3    1000

In realtà i pesi del sistema decimale sono le unità (U), le decine (D), le centinaia (C), le migliaia (M), etc., che impariamo a scuola quando facciamo la scomposizione dei numeri. 

Per il sistema binario, la base è 2, quindi i pesi sono i seguenti:

Posizione Base Esponente Peso
      1               2        1-1=0         1
      2               2        2-1=1         2
      3               2        3-1=2         4
      4               2        4-1=3         8
      5               2        5-1=4       16
      6               2        6-1=5       32
      7               2        7-1=6       64
      8               2        8-1=7     128

Per il sistema ottale, la base è 8, quindi i pesi sono i seguenti:

Posizione Base Esponente Peso
    1                8       1-1=0          1
    2                8       2-1=1          8
    3                8       3-1=2        64
    4                8       4-1=3      512

Per il sistema esadecimale, la base è 16, quindi i pesi sono i seguenti:

Posizione Base Esponente Peso
    1             16       1-1=0             1
    2             16       2-1=1           16
    3             16       3-1=2         256
    4             16       4-1=3       4096 

Adesso che conosciamo i pesi di tutti i sistemi di numerazione, possiamo fare un esempio.

Il numero decimale 255 indica duecentocinquanta cinque unità o cose, come mostra il calcolo seguente:

5 x   1 =   5 
5 x  10 =  50
2 x 100 = 200
--------------------
5+50+200=255 unità

Dimostrare che i numeri 111111112 , 3778 e FF16 , indicano lo stesso numero di unità del numero 25510.

Sistema binario: 11111111

1 x   1 =   1
1 x   2 =   2
1 x   4 =   4
1 x   8 =   8
1 x  16 =  16
1 x  32 =  32
1 x  64 =  64
1 x 128 = 128
------------------------
1+2+4+8+16+32+64+128=255 unità

Sistema ottale: 377

7 x  1 =   7
7 x  8 =  56
3 x 64 = 192
------------------------
7+56+192=255 unità

Sistema esadecimale: FF

In questo caso per fare una verifica dovete ricordare che le cifre esadecimali A, B, C, D, E, F, corrispondono ai numeri seguenti:

A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

Quindi 

F x  1 = 15 x  1 =  15
F x 16 = 15 x 16 = 240
------------------------
15+240=255 unità

Come si convertono i numeri decimali in numeri binari, ottali ed esadecimali

Per convertire un numero decimale nel numero corrispondente ad un sistema di numerazione diverso, basta procedere nel modo seguente:

1) Definire la base del sistema di numerazione in cui volete convertire il numero decimale;
2) Dividere il numero decimale per la base del sistema di numerazione scelto fino a quando è possibile;
3) Infine, prendere l'ultimo risultato ottenuto, insieme ai resti di tutte le divisioni fatte e scriverli da sinista verso destra.

Ad esempio, convertiamo il numero decimale 255 in binario, ottale e esadecimale.

1) Sistema binario

base=2, segue:

255/2 = 127 con resto 1
127/2 =  63 con resto 1
 63/2 =  31 con resto 1
 31/2 =  15 con resto 1
 15/2 =   7 con resto 1
  7/2 =   3 con resto 1
  3/2 =   1 con resto 1

da cui si ottiene che:
25510 = 111111112

2) Sistema ottale

base=8, segue:
 
255/8 = 31  con resto 7
 31/8 =  3  con resto 7

da cui si ottiene che:
25510 = 3778

3) Sistema esadecimale
  
base=16, segue:

255/16 = 15 con resto 15

da cui si ottiene che:
25510 = 151516 = FF16

Matematica applicata

Laboratorio 1

Creare un programma che calcola i primi otto pesi dei seguenti sistemi di numerazione:

1) Decimale    (Dec)
2) Binario     (Bin)
3) Ottale      (Ott)
4) Esadecimale (Esa)

Soluzione JavaScript


var input = require("readline-sync");
var base = 0;
var nomeSistemaDiNumerazione = "";
var risposta = "";
var scelta = 0;
do {
    // Menu per la scelta del sistema di numerazione
    console.log("1) Sistema Decimale    (Dec)");
    console.log("2) Sistema Binario     (Bin)");
    console.log("3) Sistema Ottale      (Ott)");
    console.log("4) Sistema Esadecimale (Esa)");
    console.log("5) Esci");
    scelta = parseInt(input.question("Scegli: "))
    // Visualizzo un errore se la scelta non è corretta
    while (scelta < 1 || scelta > 5 || isNaN(scelta)) {
        console.log("Errore:scegli un numero tra 1 e 5 ...");
        scelta = input.question("Scegli: ");
    }
    // Imposto la base e il nome del sistema di numerazione scelto
    if (scelta == 1) {
        base = 10;
        nomeSistemaDiNumerazione = "Decimale (Dec)";
    } else if (scelta == 2) {
        base = 2;
        nomeSistemaDiNumerazione = "Binario (Bin)";
    } else if (scelta == 3) {
        base = 8;
        nomeSistemaDiNumerazione = "Ottale (Ott)";
    } else if (scelta == 4) {
        base = 16;
        nomeSistemaDiNumerazione = "Esadecimale (Esa)";
    }
    if (scelta != 5) {
        // Calcolo i primi 8 pesi in base al sistema di numerazione scelto
        console.log("Pesi delle prime 8 cifre di un numero " + nomeSistemaDiNumerazione);
        for (x = 0; x <= 7; x++) {
              console.log((x + 1) + ") " + Math.pow(base, x));
        }
        risposta = input.question("Premi invio per continuare ...");
    }
} while (scelta != 5);
console.log("Fine programma");

Soluzione Python


import math
base = 0
nomeSistemaDiNumerazione = ''
risposta = ''
scelta = 0
while scelta != 5:
    # Menu per la scelta del sistema di numerazione
    print("1) Sistema Decimale    (Dec)")
    print("2) Sistema Binario     (Bin)")
    print("3) Sistema Ottale      (Ott)")
    print("4) Sistema Esadecimale (Esa)")
    print("5) Esci")
    scelta = int(input("Scegli: "))
    # Visualizzo un errore se la scelta non è corretta
    while scelta < 1 or scelta > 5:
        print("Errore:scegli un numero tra 1 e 5 ...")
        scelta = int(input("Scegli: "))
    # Imposto la base e il nome del sistema di numerazione scelto
    if scelta == 1:
        base = 10
        nomeSistemaDiNumerazione = 'Decimale (Dec)'
    elif scelta == 2:
        base = 2
        nomeSistemaDiNumerazione = 'Binario (Bin)'
    elif scelta == 3:
        base = 8
        nomeSistemaDiNumerazione = 'Ottale (Ott)'
    elif scelta == 4:
        base = 16
        nomeSistemaDiNumerazione = "Esadecimale (Esa)"
    if scelta != 5:

       # Calcolo i primi 8 pesi in base al sistema di numerazione scelto
       print("Pesi delle prime 8 cifre di un numero " + nomeSistemaDiNumerazione)
       for x in range(8):
            print(str((x + 1)) + ") " + str(int(math.pow(base, x))))
       risposta = input("Premi invio per continuare ...")
print("Fine programma")


Laboratorio 2

Creare un programma che converte un numero decimale in un numero:

1) Binario     (Bin)
2) Ottale      (Ott)
3) Esadecimale (Esa)

Soluzione JavaScript


var input = require("readline-sync");
var numero = 0;
var numeroDecimale = 0;
var numeroConvertito = "";
var base = 0;
var risultato = 0;
var resto = 0;
var cifre = [];
var cifreNumero = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
var nomeSistemaDiNumerazione = "";
var risposta = "";
var scelta = 0;
do {
    cifre = [];
    numeroDecimale = parseInt(input.question("Inserisci un numero decimale: "))
    while (numeroDecimale < 0 || isNaN(numeroDecimale)) {
        console.log("Errore: inserire un numero uguale a zero o mmaggiore di zero ...");
        numeroDecimale = parseInt(input.question("Inserisci un numero decimale: "))
    }
    // Menu per la scelta del sistema di numerazione
    console.log("1) Sistema Binario     (Bin)");
    console.log("2) Sistema Ottale      (Ott)");
    console.log("3) Sistema Esadecimale (Esa)");
    scelta = parseInt(input.question("Scegli il sistema di converione: "))
    // Visualizzo un errore se la scelta non è corretta
    while (scelta < 1 || scelta > 3 || isNaN(scelta)) {
        console.log("Errore:scegli un numero tra 1 e 3 ...");
        scelta = parseInt(input.question("Scegli il sistema di conversione: "));
    }
    // Imposto la base e il nome del sistema di numerazione scelto
    if (scelta == 1) {
        base = 2;
        nomeSistemaDiNumerazione = "Binario (Bin)";
    } else if (scelta == 2) {
        base = 8;
        nomeSistemaDiNumerazione = "Ottale (Ott)";
    } else if (scelta == 3) {
        base = 16;
        nomeSistemaDiNumerazione = "Esadecimale (Esa)";
    }
    // Converto il numero decimale nel sistema di numerazione scelto
    numero = numeroDecimale;
    while (numero >= base) {
        risultato = Math.floor(numero / base);
        resto = numero % base;
        cifre.push(resto);
        numero = risultato;
    }
    cifre.push(numero);
    // stampo il numero convertito
    numeroConvertito = "";
    for (var x = cifre.length - 1; x >= 0; x--) {
        numeroConvertito = numeroConvertito + cifreNumero[cifre[x]];
    }
    console.log("Numero decimale da convertire: " + numeroDecimale);
    console.log("Numero convertito in " + nomeSistemaDiNumerazione + " " + numeroConvertito);
    risposta = input.question("Vuoi convertire un altro numero (s/n) ? ");
    while (risposta.toLowerCase() != 's' && risposta.toLowerCase() != 'n') {
        console.log("Errore: inserire s oppure n ...");
        risposta = input.question("Vuoi convertire un altro numero (s/n) ? ");
    }
} while (risposta.toLowerCase() == 's');
console.log("Fine programma");

Soluzione Python


numero = 0
numeroDecimale = 0
numeroConvertito = ''
base = 0
risultato = 0
resto = 0
cifre = []
cifreNumero = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
nomeSistemaDiNumerazione = ''
risposta = 's'
scelta = 0
while risposta=='s':
    cifre = []
    numeroDecimale = int(input("Inserisci un numero decimale: "))
    while numeroDecimale < 0:
        print("Errore: inserire un numero uguale a zero o mmaggiore di zero ...")
        numeroDecimale = int(input("Inserisci un numero decimale: "))
    # Menu per la scelta del sistema di numerazione
    print("1) Sistema Binario     (Bin)")
    print("2) Sistema Ottale      (Ott)")
    print("3) Sistema Esadecimale (Esa)")
    scelta = int(input("Scegli il sistema di converione: "))
    # Visualizzo un errore se la scelta non è corretta
    while scelta < 1 or scelta > 3:
        print("Errore:scegli un numero tra 1 e 3 ...")
        scelta = int(input("Scegli il sistema di converione: "))
    # Imposto la base e il nome del sistema di numerazione scelto
    if scelta == 1:
        base = 2
        nomeSistemaDiNumerazione = 'Binario (Bin)'
    elif scelta == 2:
        base = 8
        nomeSistemaDiNumerazione = 'Ottale (Ott)'
    elif scelta == 3:
        base = 16
        nomeSistemaDiNumerazione = 'Esadecimale (Esa)'
    # Converto il numero decimale nel sistema di numerazione scelto
    numero = numeroDecimale
    while numero >= base:
        risultato = int(numero / base)
        resto = numero % base
        cifre.append(resto)
        numero = risultato
    cifre.append(numero)
    # stampo il numero convertito
    numeroConvertito = ""
    for x in range(len(cifre)-1,-1,-1):
        numeroConvertito = numeroConvertito + cifreNumero[cifre[x]]
    print("Numero decimale da convertire: " + str(numeroDecimale))
    print("Numero convertito in " + nomeSistemaDiNumerazione + " " + numeroConvertito)
    risposta = input("Vuoi convertire un altro numero (s/n) ? ")
    while risposta.lower() != 's' and risposta.lower() != 'n':
        print("Errore: inserire s oppure n ...")
        risposta = input("Vuoi convertire un altro numero (s/n) ? ")
print("Fine programma")


Come eseguire i programmi JavaScript

Per eseguire i programmi JavaScript, bisogna installare il framework node.js sul proprio computer.

Il download del file d'installazione può essere fatto collegandosi al link: https://nodejs.org/it/download/.

Il file di download deve corrispondere al sistema operativo installato sul proprio computer.

Dopo il download eseguire il file per installare node.js.

Per verificare se il framework node.js è stato installato correttamente, dal prompt dei comandi del sistema operativo usato, eseguire il comando:
node --version

dovrebbe essere visualizzata la versione di node.js installata, come mostra l'immagine seguente:


Successivamente bisogna creare una cartella "laboratori" dove salvare i due programmi JavaScript da eseguire.

Per salvare i programmi nella cartella "laboratori", basta  copiarli nel blocco note o in qualunque editor di testo e salvarli con i nomi:

1) calcola_pesi.js
2) converti_decimale.js

Infine, da prompt dei comandi, entrare nella cartella laboratori ed eseguire il comando:

npm install readline-sync

Questa libreria serve per permettere l'inserimento di dati da tastiera, quando vengono eseguiti i programmi.

A queso punto si possono eseguire i programmi con il comando node, che è l'interprete JavaScript di node.js, come mostrano gli esempi seguenti:

node calcola_pesi

oppure

node converti_decimale

 


Come eseguire i programmi Python

Per eseguire i programmi scritti Python, bisogna installare il framework python sul proprio computer.

Il download del file d'installazione può essere fatto collegandosi al link: https://www.python.org/downloads/
.

Il file di download deve corrispondere al sistema operativo installato sul proprio computer.

Dopo il download eseguire il file per installare python.

Attenzione, durante l'installazione è importante spuntare l'opzione "Add Python 3.X to PATH:



Per verificare se il framework python è stato installato correttamente, dal prompt dei comandi del sistema operativo usato, eseguire il comando:
python --version

dovrebbe essere visualizzata la versione di python installata, come mostra l'immagine seguente:


Successivamente bisogna creare una cartella "laboratori" dove salvare i programmi python da eseguire.

Per salvare i programmi nella cartella "laboratori", basta  copiarli nel blocco note o in qualunque editor di testo e salvarli con il nomi:

1) calcola_pesi.py
2) converti_decimale.py

Infine, per eseguire i programmi, da prompt dei comandi, entrare nella cartella laboratori ed il comando:

python calcola_pesi.py

oppure

python  converti_decimale.py


Clicca qui per imparare a programmare in JavaScript


Clicca qui per approfondire l'installazione di node.js


Clicca qui per imparare a programmare in TypeScript


Clicca qui per imparare a programmare in SQL


Per informazioni e contatti: www.skillfactory.it

binario decimale ottale esadecimale sistema posizionale sistemi di numerazione bit byte python javascript

Share Button
TOP