| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Corso di informatica - Codifica numeri e testo

Page history last edited by Trapani Marco 14 years, 11 months ago
  • Unità d'informazione: Bit, byte, parole

    Le unità di informazione fondamentali dell'informatica sono il bit ed il byte. Il primo è una quantità che si può esprimere in due modi soli (si può dire che è una quantità dicotomica). A seconda del contesto può quindi valere vero o falso, acceso o spento e via dicendo. Se usiamo cifre per esprimere un bit questo può assumere solo i valori 0 od 1. Il byte è invece costituito da una sequenza di 8 bit.

    Anche la parola è costituita da una sequenza di bit ma il loro numero è variabile e può dipendere dal tipo di dati che vi vengono rappresentati. Per numeri interi, numeri con la virgola, istruzioni etc. Usualmente le parole del computer hanno dimensioni che sono multipli di byte: 16, 32, 64, 128 bit.

     

  • Quanta informazione sta in un byte?

    È facile verificare che la quantità di oggetti numerabili con un certo numero di bits, per esempio n, è pari a 2n. Per esempio con un bit si possono rappresentare 21 numeri compresi fra 0 ed 1 mentre con un byte 28 numeri compresi fra 0 e 255.

    Questo è un modo molto efficiente di memorizzare l'informazione: la quantità di oggetti che si possono contare aumenta enormemente con l'aumentare del numero di bit. Lo sapeva anche Dante Alighieri!

    Nella seguente tabella riportiamo i numeri rappresentabili dato il numero di bit disponibili. Abbiamo visto che con 8 bit possiamo rappresentare numeri compresi fra 0 e 255 tuttavia è bene osservare che il concetto è generale e non concerne solo la rappresentazione di numeri. Infatti, più in generale possiamo parlare di numero di oggetti rappresentabili nel senso che ad ogni configurazione di bit possiamo pensare di associare un oggetto. Per esempio, questo è quello che si fa con la codifica ASCII ove ad ogni configurazione di bit in un byte corrisponde un simbolo; poiché i caratteri ASCII sono codificati in un byte possiamo rappresentare un numero massimo di 256 simboli.

     

    Numero di bit Numero di oggetti rappresentabili
    28 256
    216 65536
    232 4,294,967,296
    264 1.8x1019
    2128 3.4x1038

     

  • Per quantificare varie quantità di uso comune (per esempio capacità di memorizzazione dei dischi, velocità di trasferimento dei dati) il bit ed il byte sono ormai troppo piccoli. È quindi diventato usuale avvalersi di multipli, in modo analogo a quello che si fa con altre unità di misura. È usuale e conveniente utilizzare le potenze della base numerica in cui si lavora per definire i multipli delle unità di misura. Così accade che per esempio che per il chilogrammo 1 Kg = 103 gr = 1000 gr. I multipli delle unità di misura delle informazioni sono un po' diversi a causa del fatto che viene naturale lavorare con le potenze di due. Succede quindi che l'unità di misura che esprime il "migliaio di byte" non corrisponda esattamente a 1000 byte bensì alla potenza di 2 che più si avvicina a 1000 byte: 210=1024. Analogamente per gli altri multipli che riportiamo nella tabella seguente.

     

    Multiplo di byte Numero effettivo di byte
    KiloByte (KB) 210
    MegaByte (MB) 220
    GigaByte (GB) 230
    TeraByte (TB) 240
    PetaByte (PB) 250
    HexaByte (HB) 260
    ZettaByte (ZB) 2^70
    YottaByte (YB) 2^80

    Gli stessi multipli possono essere applicati ai bit ma si usa in tal caso la lettera "b" minuscola: Kb, Mb e via dicendo. È comune utilizzare questi multipli per le velocità di trasferimento dati. Per esempio le reti locali consentono oggi una velocità di trasferimento di 100 Mb/s, 100 MegaBit al secondo, o in alcuni casi di 1 Gb/s, 1 GigaBit al secondo.

 

  • Sistemi di numerazione binario ottale ed esadecimale

    I sistemi di numerazione presuppongono la determinazione di una base, che chiamiamo N. Per esempio nel sistema decimale N=10. In generale, un numero, per esempio di 4 cifre e che indichiamo con abcd, si esprime mediante la seguente espressione

    aN3+bN2+cN1+d

    dove le singole cifre a, b, c e d assumono N valori nell'intervallo 0,...,N-1.

    Il nostro sistema decimale è quello indio-arabico ma non è l'unico ad essere stato utilizzato. I Babilionesi usavano un sistema sessagesimale in base N=60. I computer ragionano in termini del sistema binario (N=2). Gli informatici talvolta usano volentieri i sistemi ottale (N=8) o esadecimale (N=16) perché sono molto facilmente convertibili nel sistema binario.

    L'esadecimale in particolare è comodo perchè sono previsti sedici simboli (0-9, A, B, C, D, E, F) per rappresentare valori che in "decimale" vanno da 0 a 15, e in binario da 0000 a 1111, come si vede bene nella tabella seguente: 

 

Decimale
Binario
Esadecimale
0
0000 0
1
0001 1
2
0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 10
11 1011 11
12 1100 12
13 1101 13
14 1110 14
15 1111 15

 

  •  Quindi, in definitiva il contenuto di un byte (otto bit) può essere rappresentato da DUE soli caratteri in esadecimale, ed è quello che molti programmi permettono quando fanno il cosiddetto "DUMP" (stampa) del contenuto di un file. 
  • Rappresentazione di caratteri 

    La codifica ASCII è l'ingrediente essenziale di qualsiasi testo. È tuttavia opportuno distinguere i testi scritti in semplice ASCII dagli altri. I testi scritti in ASCII non sono altro che una sequenza di byte ognuno dei quali rappresenta un simbolo alfanumerico secondo la tabella ASCII che abbiamo appena visto. Questo tipo di testo viene prodotto ed eventualmente modificato con i cosiddetti editori di testo. Alcuni esempi di editori di testo sono Edit nel sistema DOS, Notepad nel sistema Windows (Notepad è sempre disponibile in Windows, lo potete cercare nel menu avvio, programmi, accessori), Vi, Pico, Emacs nel sistema Linux; ve ne sono tantissimi altri. Sapete tuttavia che esistono molti altri programmi per la produzione di testi che sono comunemente noti come elaboratori di testo o word processor. Questi usano come ingrediente base il codice ASCII ma in realtà usano anche altre codifiche che servono a manipolare i testi e ad arricchirli esteticamente, cosa impossibile con i soli caratteri ASCII. Se per esempio scrivete un testo e lo salvate in un file con uno dei vari programmi Word disponibili, in quel file non vengono memorizzati solo i caratteri ASCII corrispondenti alle varie lettere e numeri che voi avete scritto bensì tante altre informazioni che descrivono il tipo di cartteri usati (si chiamano font: Courier, Time Roman, Helvetica e via dicendo), la loro dimensione, effetti speciali quali grassetto, corsivo, sottolineato e così via, modo in cui si presentano i paragrafi (rientro iniziale, spazio fra un paragrafo e l'altro ...), interlinea ed una miriade di altre possibili caratteristiche. Tutte queste informazioni che vanno oltre alla mera rappresentazione dei caratteri ASCII (che producono gli editori di testo) va sotto il nome di formattazione. Per inciso, questa formattazione non c'entra nulla con la formattazione che concerne lo schema logico di suddivisione della superficie di un disco magnetico. E' evidente che due file contenenti lo stesso identico testo, uno scritto con un editore di testo in caratteri ASCII semplici e l'altro scritto con un word processor (e quindi ``formattato''), hanno dimensioni molto diverse. Chiunque può fare un semplice esperimento scrivendo un testo semplicissimo, per esempio "pippo", prima con un editore di testo e poi con un word processor: troviamo che il file con i caratteri ASCII è lungo 5 byte (corripondenti ai 5 caratteri della parola "pippo") mentre quello formattato è lungo circa 20000 byte!

    Essere coscienti di cosa si impiega per scrivere un testo è utile in funzione di quello che si vuole fare in seguito. La formattazione di un testo può essere estremamente utile per metterne in debito rilievo alcune parti ma a volte ci interessa esclusivamente il suo contenuto. In questo secondo caso l'abitudine di scrivere sempre tutto in modo formattato può condurre ad un'esagerata occupazione dello spazio su disco dove vengono memorizzati i file che contengon i testi. Oppure nel caso in cui i testi debbano essere trasmessi attraverso la rete si può causare un inutile sovraccarico della medesima. In questo senso è una cattiva abitudine quella di allegare qualsiasi cosa in modo formattato ai messaggi di posta elettronica anziché scrivere semplicemente il testo dentro al programma di posta elettronica: spedire pippo in ASCII anziché in modo formattato è 20000/5=4000 volte più veloce!

    Questo tipo di riguardo nell'uso della rete prende il nome di netiquette. è un concetto che concerne la coscienza che si sta usando uno strumento che serve a tutti e che un uso accorto lo può rendere più efficiente per tutti, quindi alla fine anche per se stessi.

    • I caratteri ASCII. La codifica ASCII associa ad ogni carattere una particolare sequenza di 0 ed 1 in un byte. Esistono varie versioni dei caratteri ASCII. Le due più importanti sono la tabella ASCII standard che usa solo 7 bits che serve solo per i caratteri inglesi e la tabella ASCII estesa (ISO-Latin-8859) che usa tutti gli 8 bits e che può rappresentare i caratteri di tutte le lingue occidentali. La maggior parte dei programmi di elaborazione di testo in circolazione utilizza questo tipo di codifica. Nella tabella i simboli da rappresentare sono in rosso mentre in nero sono riportati i valori numerici associati in tre basi numeriche diverse: decimale (Dec), esadecimale (Hx) e ottale (Oct). Mancano i valori in base binaria perché sono molto scomodi da leggere. Sono invece riportati i valori nelle altre tre basi perché risultano comode da leggere in contesti diversi. Deve essere comunque chiaro che le tre rappresentazioini esprimono esattamente lo stesso numero. Per esempio, il carattere "a" è rappresentato mediante il codice numerico 141 in ottale, 61 in esadecimale e 97 in decimale. Ebbene, questi tre numeri corrispondono tutti al numero binario 01100001. La cosa importante da sapere per voi è che, con la codifica ASCII ad ogni simbolo numerico è associato un byte che contiene una precisa sequenza di "0" ed "1". Nella prima sezione a sinistra della tabella non trovate dei simboli bensì espressioni tipo NUL, SOH e via dicendo. Questi sono i caratteri ASCII "non stampabili" e servivano a controllare il flusso delle informazioni ai tempi in cui per l'introduzione di testi nei computer si usavano apparecchi che sono ormai obsoleti. Infine, nelle tre sezioni a destra, dove si trovano i caratteri veri e propri viene riportata anche un'altra codifica, chiamata html, che rappresenta la sequenza di caratteri che in codice html viene utilizzata per rappresentare questi simboli. I caratteri non stampabili non vengono sostanzialmente più usati ma possono causare degli effetti curiosi se, per errore, si apre un file in un formato proprietario, per esempio formato doc con un editore di testo (Blocco note per esempio) o se si prova a fare una lista del file su di un terminale: oltre al testo che ci aspettiamo di trovare appaiono anche simboli strani ed il programma può assumere comportamenti apparentemente anomali. Questo è dovuto al fatto che è solo il programma Word che sa come decodificare i byte mentre se usiamo un programma che li interpreta forzatamente come se fossero caratteri ASCII si ottengono risultati privi di senso: alcuni dei byte possono corrispondere a caratteri non stampabili tipo il carattere bell o il carattere di ritorno a capo che causano il comportamente apparentemente impazzito del programma.
    • Caratteri Unicode. Esiste uno standard di codifica più ampio, denominato Unicode, che impiega più di un byte per ogni carattere e che, in principio, è in grado di codificare i caratteri di tutte le lingue conosciute ed anche molti altri simboli come simboli matematici, chimici, grafici, musicali e via dicendo. Il numero di byte usato per ciascun carattere è variabile ed esistono diverse convenzioni di codifica. Queste hanno nomi tipo UTF-8, UCS-2 e simili. La descrizione di come funzionino queste codifiche non è banale e forse è inutile addentrarsi qui in simili dettagli. Basti sapere che, potenzialmente, con Unicode si dovrebbe essere in grado di rappresentare tutti gli alfabeti ed i segni utilizzati per la scrittura nella storia dell'uomo. La "tabella" Unicode è quindi sterminata ed è divisa in sezioni. Potete per esempio vedere quella dei caratteri latini, arabi ed ebraici. Questo standard non è ancora completamente diffuso ma si sta progressivamente sostituendo allo standard ASCII.

 

E' importante comunque capire che lo standard ASCII è appunto uno "standard", ossia una convenzione adottata per comodità e praticità; come spesso capita nell'informatica, c'è sempre qualcuno che fa a modo suo; in questo caso il "dissidente" è niente meno che IBM.

Negli anni 50-60 IBM (e i suoi concorrenti) non avevano alcuna intenzione di condividere gli standard, IBM anzi, godendo di un "quasi monopolio" tendeva a "imporre" i suoi criteri di codifica, sui quali però deteneva il Copyright in modo da poterli gestire e modificare a suo piacimento.

In quel periodo IBM aveva messo a punto la codifica EBCDIC (Extended Binary Code Data Interchange Code), una tabella di 256 caratteri associati alle sequenze di 8 bit.

La tabella EBCDIC era, all'epoca, una prerogativa e praticamente un esclusiva dei sistemi IBM, dai Mainframe ai Minicomputer (non esistevano ancora i Personal...) mentre la concorrenza si è sempre "appoggiata" allo standard ASCII  fin da quando è stato definito.

EBCDIC sarebbe un pezzo da museo, se non fosse per il banale fatto che i sistemi Mainframe e Midframe IBM (quelli chiamati, adesso zSeries e iSeries), discendenti dagli storici sistemi S/360-S/370-S/34-S/38, utilizzano ancora questa codifica, e quindi i dati memorizzati nei DB su questi sistemi sono in EBCDIC.

Non si tratta di una questione banale o di poco conto: i Mainframe e i Midframe IBM sono tuttora saldamente in uso presso centinaia di migliaia di organizzazioni anche di rilevanza mondiale: Aziende, Banche, Ospedali, ecc.ecc.

Questo normalmente è quasi trasparente per gli "utenti finali", perchè i programmi che si occupano del trasferimento dati da un sistema di questo tipo ad un personal (o comunque ad un sistema "non EBCDIC") utilizzano delle "tavole di conversione" per "mappare" i caratteri da EBCDIC a ASCII e viceversa; peccato che qualche problemino si presenta per i famigerati caratteri "accentati" (àòèéìù) o speciali (§£$€) che, spesso, vengono interpretati male.

 

Comments (0)

You don't have permission to comment on this page.