I caratteri e il tipo char

Molti linguaggi di programmazione forniscono un tipo di dato i cui valori rappresentano caratteri, cioè lettere dell'alfabeto (sia maiuscole che minuscole), cifre decimali (0, 1, ..., 9), segni di interpunzione, parentesi, ...

Di norma i caratteri vengono rappresentati come numeri interi utilizzando un'opportuna codifica. Ad esempio, in C  e C++, il tipo di dati char usa 8 bit, e usa il codice ASCII (American Standard Code for Information Interchange) per la codifica dei caratteri.

Il codice ASCII in realtà fissa il codice di soli 128 caratteri. I rimanenti 128 valori rappresentabili con 8 bit sono usati per codificare altri caratteri (ad esempio, le lettere accentate), ma con codifiche diverse in sistemi/linguaggi diversi!! 

Esperimento: Avete mai provato a leggere sotto Linux un file di solo testo scritto in italiano sotto Windows? 

In Java, il tipo di dati char usa 16 bit per ogni carattere, e usa il codice UNICODE, che permette di rappresentare 216 = 65535 caratteri: questo permette di fissare in modo univoco la codifica di tutte le lettere usate negli alfabeti occidentali, nonchè di ideogrammi e segni usati in altre lingue.




Costanti di tipo char

Le costanti di tipo carattere si scrivono tra singoli apici. Una costante di questo tipo può essere un carattere semplice o una sequenza di escape.

char ch = 'a'; Assegno alla variabile ch il carattere a minuscola
char ch2 = '\n'; Assegno alla variabile ch2 il carattere di ritorno a capo
char ch3 = '\"'; Assegno alla variabile ch3 il carattere di doppio apice



Manipolazione di char come numeri

Il tipo di dati char è a tutti gli effetti un tipo numerico:

  • si possono applicare ai char tutti gli operatori aritmetici;

  • si possono convertire char in int e viceversa, eventualmente usando l'operatore di cast.

 
char ch1 = 'a';
char ch2 = 'c';
char ch3 = (char) ((ch1 + ch2)/2); System.out.println(ch3);
 

Cosa stampa?
Il cast è necessario?
 
char ch = 'A';
int code = (int) ch;
System.out.println(code);

System.out.println((int) 'A');
 
Due modi equivalenti di stampare il codice UNICODE di 'A', 65.
I cast sono necessari?
 
char lower = 'k';
char upper = (char) (lower - 'a' + 'A');
System.out.println(upper);
 
Cosa stampa?
Tecnica elegante per converire maiuscole in minuscole e viceversa.