c++ - lenguaje - imprimir cadena de caracteres en c
rango para valores enteros de caracteres en C++ (5)
Gracias Roddy y Esteban Brenes por las útiles respuestas.
Este es mi entendimiento actual:
Hay tres posibilidades. Si los valores se representan como sin signo, un carácter oscilará entre 0 y 255. Si los valores están representados como firmados en complemento a dos, un carácter oscilará entre -128 y 127. Finalmente, si los valores están representados como firmados en un complemento , una char variará de -127 a 127. Esta última posibilidad sugiere que solo habría 255 valores posibles en contraste con los 256 valores posibles para las dos primeras implementaciones, pero esto no tiene en cuenta el cero negativo en las representaciones de complemento de uno .
Estoy leyendo el lenguaje de programación C ++ y en él Stroustrup afirma que el valor int de un char puede variar de 0 a 255 o de -127 a 127, dependiendo de la implementación. ¿Es esto correcto? Parece que debería ser de -128 a 127. De lo contrario, ¿por qué son sus únicos 255 valores posibles en la segunda posibilidad de implementación, no 256?
Tipos de caracteres en C y C ++
Después de leer, parece que puede ser cualquiera de ellos, dependiendo de la implementación.
Como el estándar no dice nada sobre el tipo de carácter, "char" puede ser:
"char sin signo" (0-255) en algunos compiladores (ejemplo: compilador TexasInstruments para sus procesadores ARM - serie OMAP)
"char firmado" (-128-127) en la mayoría de los compiladores (gcc, MSVC ...)
Para asegurarse de que siempre tenga un rango bien definido, debe usar "char firmado" o "char sin signo".
Es un error pensar que un carácter sin signo va de 0 a 255. Ese es solo su rango mínimo. un char debe tener al menos 8 bits, y char firmado, char sin signo y char sí mismo puede tener más de 8 bits. entonces eso significa que el char sin signo podría ir más allá de 255. aunque admitidamente, no tengo una implementación donde tenía más de 8 bits, teóricamente es posible. eso está especificado en el estándar c89 (en las bases de c ++ 03), documentando los límites del archivo.h (CHAR_BIT, UCHAR_MAX, CHAR_MAX).
Estás atrapado en el pensamiento complementario de dos: ¡el estándar C ++ no define la representación utilizada para los números negativos!
Si su computadora (dios no lo quiera) usa el complemento de uno para representar números negativos, tiene un rango de -127 a + 127 en un byte de 8 bits. Por el lado positivo, tienes dos representaciones posibles diferentes para cero ...
Sin embargo, en el mundo real, es poco probable que te encuentres con la computadora de un complemento .