2011-12-14 16 views
15

estaba leyendo el C++ FAQ y dice¿Qué es int8_t si una máquina tiene> 8 bits por byte?

El lenguaje C++ garantiza un byte debe haber siempre al menos 8 bits

Entonces, ¿qué significa eso para los tipos <cstdint>?

Pregunta lateral - si quiero una matriz de bytes ¿debo usar int8_t o char y por qué?

+1

Técnicamente es una pregunta en C, ya que los tipos vuelven al estándar C (§7.18). – kennytm

Respuesta

14

C++ (y C, así) define intX_t (es decir, los tipos anchura enteros exactas) typedefs como opcional. Por lo tanto, simplemente no estará allí si no hay una unidad direccionable que tenga exactamente 8 bits de ancho.

Si desea una matriz de bytes, se debe utilizar char, como sizeof char (y signed char y unsigned char) está bien definida para estar siempre de 1 byte.

+2

Espere, si recuerdo correctamente sizeof char se define como 1, pero el estándar no especifica si es 1 byte u otra cosa – BlackBear

+0

@BlackBear: No, el estándar es muy claro. 'sizeof' devuelve el tamaño en bytes y' sizeof (char) == 1'. –

+4

¿Cómo manejo IO en sistemas con bytes de diferentes tamaños? ¿O no debería intentarlo? – David

2

Para añadir a lo Cat Plus Plus ya se ha dicho (que el tipo es opcional), se puede comprobar si está presente mediante el uso de algo como:

#ifdef INT8_MAX 
// type int8_t exists. 
#endif 

o más probablemente:

#ifndef INT8_MAX 
#error Machines with bytes that don't have 8 bits aren't supported 
#endif 
+1

Un compilador puede definir 'int8_t' y hacer cálculos en el software mientras la máquina no tiene 8 bits por byte. – Dani

+0

No estoy seguro de eso. Creo que 'int8_t' se supone que es un typedef a uno de los tipos integrales básicos. Pero no estoy seguro. Tal implementación sería muy lenta en una máquina con un complemento de 9 bits 1 (algunos Unisys). –

+0

@JamesKanze, es exactamente por eso que debes usar los tipos "nativos" siempre que sea posible. – vonbrand

Cuestiones relacionadas