Lo standard linguaggio C definisce una macchina virtuale in cui tutti gli oggetti occupano un numero intero di astratte unità di memoria costituiti di un numero fisso di bit (indicato dal CHAR_BIT
macro in limits.h). Ogni unità di memoria deve essere indirizzabile in modo univoco. Un'unità di memoria è definita come la quantità di memoria occupata da un singolo carattere dal set di caratteri di base . Così, per definizione , la dimensione del tipo char
è 1.
Infine, queste unità di archiviazione astratte devono essere mappato su hardware fisico. Le architetture più comuni utilizzano byte a 8 bit indirizzabili individualmente, pertanto gli oggetti char
di solito si mappano su un singolo byte a 8 bit.
Normalmente.
Storicamente, le dimensioni dei byte nativi sono state ovunque da 6 a 9 bit di larghezza. In C, il tipo char
deve essere almeno largo 8 bit per rappresentare tutti i caratteri nel set di caratteri di base, quindi per supportare una macchina con byte a 6 bit, un compilatore potrebbe dover mappare un oggetto char
su due byte macchina nativi, con CHAR_BIT
in 12.sizeof (char)
è ancora 1, quindi i tipi con dimensione N
verranno associati ai byte nativi 2 * N
.
1. Il set di caratteri base consiste di tutte le 26 lettere inglesi sia maiuscole e minuscole, 10 cifre, punteggiatura e altri caratteri grafici e controllo quali nuove righe, schede, alimentazioni di forma, ecc , che si adattano comodamente a 8 bit.
fonte
2015-05-11 15:55:19
Proprio così :-). – Eregrith
Ovviamente, anche lì si sono rovinati ... un 'char' a 16 bit non è in grado di rappresentare ogni carattere Unicode. – duskwuff
@duskwuff: Non solo, ma anche se l'intenzione era quella di evitare di essere incentrati sull'inglese, in molti casi d'uso UTF-16 finirà per essere più ingombrante di UTF-8 anche per le lingue che usano molti caratteri che sarebbero rappresentati più in modo compatto in UTF-16, poiché gran parte del testo che il processo di macchine è progettato per essere leggibile dalla macchina anziché leggibile da un utente, e il testo leggibile da una macchina è solitamente ASCII. – supercat