rappresentazione dati


numeri

base 10 ⇒ base 2 ⇒ vero o falso

0falso
1vero

caratteri

carattere ⇒ numero ⇒ base 2 ⇒ true/false

a   ⇒   97   ⇒   1100001
b   ⇒   98   ⇒   1100010
c   ⇒   99   ⇒   1100011

trovare il numero di un carattere

programma C
%c stampa come carattere
%d stampa come intero

caratteri.c

#include <stdlib.h>
#include <stdio.h>

int main() {
	char x, y, z;

	x = 'a';
	y = 'b';
	z = 'c';

	printf("stampati come caratteri:\n");
	printf("%c\n", x);
	printf("%c\n", y);
	printf("%c\n", z);

	printf("stampati come interi:\n");
	printf("%d\n", x);
	printf("%d\n", y);
	printf("%d\n", z);

	return EXIT_SUCCESS;
}

altri linguaggi

C
caratteri.c
Java
Caratteri.java
Python
caratteri.py
lua
caratteri.lua
postscript
caratteri.ps

ASCII

carattere → sette bit

oppure: otto bit con il primo sempre zero

quindi: numeri 0—127


tabella dei caratteri ASCII

ASCII

0:NULSOHSTXETXEOTENQACKBELBSHT
10:LFVTFFCRSOSIDLEDC1DC2DC3
20:DC4NAKSYNETBCANEMSUBESCFSGS
30:RSUSSP!"#$%&'
40:()*+,-./01
50:23456789:;
60:<=>?@ABCDE
70:FGHIJKLMNO
80:PQRSTUVWXY
90:Z[\]^_`abc
100:defghijklm
110:nopqrstuvw
120:xyz{|}~DEL

caratteri speciali

alcuni numeri non sono veri caratteri

12
ritorno a capo
8
cursore indietro di un carattere
7
beep!
19
richiesta sospensione trasmissione
17
richiesta ripresa trasmissione

alcuni sono ancora usati, altri sono storici

17 e 19 servivano per la trasmissione
era lo scopo principale della codifica ASCII:

This International Standard specifies a set of 128 characters, (control characters and graphic characters such as letters, digits and symbols) with their coded representation. […] This character set is primarily intended for the interchange of information among data processing systems and associated equipment, and within data communication systems.

lettere accentate, simboli, altri alfabeti

sette bit = 128 caratteri

non bastano per tutte le lettere accentate (à, è, ò)
i simboli (es. €, ¢)
i caratteri in altri alfabeti (es. Θ, Ђ, ב)

estensioni: ISO-8859-1, unicode


ISO-8859-1

ogni carattere otto bit

il primo può essere uno
invece che sempre zero come in ASCII

otto bit = 256 numeri

primi 0—127 uguali ad ASCII
(inclusi quelli speciali)

altri:


tabella iso-8859-1

prima metà uguale ad ASCII

seconda metà: altri caratteri

0:NULSOHSTXETXEOTENQACKBELBSHT
10:LFVTFFCRSOSIDLEDC1DC2DC3
20:DC4NAKSYNETBCANEMSUBESCFSGS
30:RSUSSP!"#$%&'
40:()*+,-./01
50:23456789:;
60:<=>?@ABCDE
70:FGHIJKLMNO
80:PQRSTUVWXY
90:Z[\]^_`abc
100:defghijklm
110:nopqrstuvw
120:xyz{|}~DEL
130:
140:
150:
160: ¡¢£¤¥¦§¨©
170:ª«¬­®¯°±²³
180:´µ·¸¹º»¼½
190:¾¿ÀÁÂÃÄÅÆÇ
200:ÈÉÊËÌÍÎÏÐÑ
210:ÒÓÔÕÖרÙÚÛ
220:ÜÝÞßàáâãäå
230:æçèéêëìíîï
240:ðñòóôõö÷øù
250:úûüýþÿ

problema di iso-8859-1

va bene per alcune lingue:

solo in parte per altre
(es. manca la i senza il punto del turco: "ı")

per niente per altre ancora
ebraico, cinese, …


altri iso-8859-x

altre lingue: ISO-8859-2, ISO-8859-2, …

sempre 0—127 come ASCII

ma 128—255 diversi

es. in ISO-8859-9 253 = i senza punto "ı"
(in ISO-8859-1 lo stesso numero era la y con accento acuto)


problemi con ISO-8859


unicode

più di otto bit per ogni carattere

ogni carattere = trentadue bit
esempio: ı = 0x0131 = 00000000 000000000 00000001 00110001

due modi diversi per memorizzare questi 32:

ucs32
un singolo numero a trentadue bit
o quattro numeri a otto bit
utf-8
vari numeri a otto bit, da uno a sette

utf-8

usato in pratica nei programmi moderni

es: "t", "å", "ı", "੆"

i caratteri sono sequenze di numeri a otto bit

lunghezza della sequenza: da uno a sette numeri


rappresentazione delle stringhe

sono sequenze di caratteri

ogni carattere è un numero

vengono memorizzati in sequenza

99 105 97 111 32 116 117 116 116 105 33 0

99=c, 105=i, 97=a, …

spazio=32

fine stringa=0


0 non è '0'

carattere '0' = numero 48

terminatore di stringa = numero 0

esempio: stringa 'da 0 a 5':

        da 0 a 5
           ↑
100 97 32 48 32 97 32 53 0

ritorno a capo

originariamente, comandi per le stampanti:


stringhe: alternative


suoni

sono onde di pressione dell'aria

rappresentazione numerica:

suono = sequenza di questi valori


approssimazioni

non è uguale all'originale:

fedeltà all'originale = alta frequenza di campionamento + alto numero di bit


MIDI

indica come generare i suoni (strumenti)


colori

basata su un fatto:

la maggior parte dei colori visibili all'occhio umano si possono considerare un miscuglio di quantità variabili di rosso, verde e blu

esempio:        

massimo di rosso, mezzo verde e niente blu


immagini

immagine = griglia di quadrettini (pixel)

ogni pixel viene considerato di un colore solo
(= quantità di rosso, verde, blu)


rappresentazione delle immagini

esempio, nel formato ppm:

Immagine (ingrandita)       Rappresentazione
NERO  VERDE BLU
VERDE NERO  BLU
NERO  NERO  BLU
P3
3 3
255
0 0 0    0 255 0  0 0 255
0 255 0  0 0 0    0 0 255
0 0 0    0 0 0    0 0 100
parte iniziale
identificativo del formato (P3)
larghezza e altezza dell'immagine (3×3)
massima intensità di colore (255)
matrice
i colori dei pixel, in sequenza
esempio: 0 255 0 = niente rosso, max verde, niente blu

approssimazioni


immagini vettoriali

invece dei pixel:

figure geometriche elementari


immagini vettoriali: esempio

Immagine Rappresentazione
l'immagine di una linea, un cerchio e una scritta "abcd" in rosso
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
  <g style="stroke:#000000;fill:none;">
    <polyline points="0,0 100,100" />
    <circle cx="80" cy="80" r="40" />
    <text x="20" y="80" stroke="#FF0000">abcd</text>
  </g>
</svg>

immagini vettoriali: tag

<polyline points="0,0 100,100" />
segmento da coordinata 0,0 a 100,100
<circle cx="80" cy="80" r="40" />
cerchio
<text x="20" y="80" stroke="#FF0000">abcd</text>
scritta abcd in rosso

origine: in alto a sinistra