2011-09-28 13 views
9

tengo algo como:¿Por qué std :: cout no imprime el valor correcto para mi número int8_t?

int8_t value; 
value = -27; 

std::cout << value << std::endl; 

Cuando ejecuto mi programa me sale un valor aleatorio equivocado de <E5> da salida a la pantalla, pero cuando ejecuto el programa en el BGF y el uso de p value imprime -27, el cual es el valor correcto ¿Alguien tiene alguna idea?

+0

uso [ 'std :: cout << +] valor' (https: // stackoverflow. com/a/28414758/995714) –

Respuesta

19

Debido int8_t es la misma que signed char, y char no se trata como un número por la corriente. Emitir, por ejemplo, int16_t

std::cout << static_cast<int16_t>(value) << std::endl; 

y obtendrá el resultado correcto.

+1

, ya que el tipo de int16_t puede no ser un número entero (como la secuencia lo comprende), quizás debería hacerlo a 'int'. –

2

Esto es porque int8_t es también con signo char.

Entonces el valor se mostrará como un valor de char.

Para forzar pantalla int podría utilizar

std::cout << (int) 'a' << std::endl; 

Esto funcionará, siempre y cuando no se requiere un formato especial, por ejemplo,

std::cout << std::hex << (int) 'a' << std::endl; 

En ese caso obtendrá artefactos del tamaño ensanchado, especialmente si el valor char es negativo (se obtendría FFFFFFFF o FFFF para (int)(int8_t)-1 en lugar de FF)

Editar ver también esta valoración crítica muy legible que entra en más detalles y ofrece más estrategias de 'acuerdo' con esto: http://blog.mezeske.com/?p=170


dependiendo de la arquitectura y el compilador

1

Parece que está imprimiendo el valor como carácter - Si usa 'char value;' en cambio, imprime lo mismo. int8_t es de la biblioteca estándar C, por lo que es posible que cout no esté preparado (o simplemente defina typedefd como char).

3

Lo más probable es int8_t

typedef char int8_t 

Por lo tanto cuando se utiliza corriente a cabo el "valor" del tipo subyacente (un char) se imprime.

Una solución para conseguir un "número entero" impreso es escribir el valor fundido antes de la transmisión de la int8_t:

std::cout << static_cast<int>(value) << std::endl; 
Cuestiones relacionadas