Domanda

Qual è la relazione tra lunghezza di parola, caratteri, dimensioni integer e byte in C ++?

È stato utile?

Soluzione

Lo standard richiede che alcuni tipi hanno minimo dimensioni (corto è almeno 16 bit, int è almeno 16 bit, ecc), e che alcuni gruppi di tipo ordinate (sizeof(int)> = sizeof(short) > = sizeof(char)).

Altri suggerimenti

In C ++ un char deve essere abbastanza grande da contenere qualsiasi carattere nel set di caratteri di base del Implementazione.

int ha la "dimensione naturale suggerita dall'architettura dell'ambiente di esecuzione". Si noti che questo significa che un int non deve essere di almeno 32 bit in formato. Implementazioni dove int è di 16 bit sono comuni (si pensi incorporato OT MS-DOS).

I seguenti sono tratti da varie parti del C ++ 98 e standard C99:

  • long int deve essere almeno grande quanto int
  • int deve essere almeno grande quanto short
  • short deve essere almeno grande quanto char

Si noti che potrebbero essere tutti della stessa dimensione.

Anche (assumendo implementazione di un complemento a due):

  • long int deve essere di almeno 32 bit
  • int deve essere almeno 16 bit
  • short deve essere almeno 16 bit
  • char deve essere almeno 8 bit

Lo Standard non conosce questa "parola" thingy utilizzato dai processori. Ma si dice tipo "int" deve avere la dimensione naturale per un ambiente di esecuzione. Ma anche per gli ambienti a 64 bit, int è di solito solo 32 bit. Quindi, "parola" in termini di serie ha praticamente alcun significato comune (ad eccezione della "parola" comune inglese ovviamente).

Dimensione carattere è la dimensione di un carattere. Dipende da cosa si parla di carattere. tipi di carattere sono char, unsigned char e char firmato. Anche wchar_t viene utilizzata per memorizzare i caratteri che possono avere qualsiasi dimensione (determinata dalla realizzazione - ma deve utilizzare uno dei tipi interi esempio il tipo sottostante Proprio come enumerazioni.), Mentre char / char o unsigned char firmato deve avere un byte. Ciò significa che un byte ha tanto bit come un char contiene. Se l'applicazione dice un oggetto di tipo char ha 16 bit, quindi un byte ha 16 bit troppo.

Ora un byte è la dimensione che si occupa char. Si tratta di un'unità, non un tipo specifico. Non c'è molto di più, solo che è l'unità che si può accedere alla memoria. Cioè non si ha accesso puntatore al bit-field, ma si ha accesso alle unità a partire da un byte.

"formato Integer" ora è piuttosto ampia. Cosa intendi? Tutti bool, char, short, int, long e le loro controparti unsinged sono numeri interi. La loro gamma è quello che definirei "dimensione integer" ed è documentato nella serie C - rilevata da Visual C ++. Per firmato char si può variare da -127 <-> 127, per brevi e int è la stessa ed è -2 ^ 15 + 1 <-> 2 ^ 15-1 e per lungo tempo è -2 ^ 31 + 1 < -> 2 ^ 31-1. Le loro controparti non firmati vanno da 0 fino a 2 ^ 8-1, 2 ^ 16-1 e 2 ^ 32-1, rispettivamente. Questi sono formati anche minima. Cioè, un int non può avere dimensione massima 2 ^ 14 su qualsiasi piattaforma, perché è meno di 2 ^ 15-1 naturalmente. Ne consegue per quei valori che è richiesto un minimo di bit. Per char che è di 8, in breve / int che ha 16 anni e per lungo tempo che è 32. rappresentazione in complemento a due per i numeri negativi non è richiesto, che è il motivo per cui il valore negativo non è -128 invece di -127 ad esempio per char firmato.

standard C ++ non ha un tipo di dati chiamato word o byte. Il resto sono ben definiti come intervalli. La base è un char che ha di bit CHAR_BITS. Il valore più comunemente usato di CHAR_BITS è 8.

sizeof (char) == 1 (un byte) (in C ++, in C - non specificato)
sizeof (int)> = sizeof (char)
word - non c ++ tipo, usualy nell'architettura calcolatore dire 2 byte

Tipo di dipende da cosa si intende per relazione. La dimensione dei tipi numerici è generalmente un multiplo della dimensione parola della macchina. Un byte è un byte è un byte - 8 bit, né più né meno. Un personaggio è definito nello standard come un singolo byte senza segno Credo (controllare l'ARM per i dettagli).

La regola generale è, non fare alcuna ipotesi circa la dimensione effettiva dei tipi di dati. La norma specifica relazioni tra i tipi come un intero "lungo" sarà la stessa dimensione o più grande di un "int". implementazioni individuali del linguaggio prenderanno misure specifiche per i tipi che sono convenienti per loro. Ad esempio, un compilatore per un processore 64 bit sceglierà dimensioni diverse rispetto a un compilatore per un processore a 32 bit.

È possibile utilizzare l'operatore sizeof () per esaminare le dimensioni specifiche per il compilatore che si sta utilizzando (sulla specifica architettura di destinazione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top