En C/C++, ¿para qué se utiliza un unsigned char
? ¿En qué se diferencia de un char
normal?
Esto depende de la implementación, ya que el estándar C NO define la significación de char
. Dependiendo de la plataforma, char puede ser signed
o unsigned
, por lo que necesitas pedir explícitamente signed char
o unsigned char
si tu implementación depende de ello. Simplemente usa char
si pretendes representar caracteres de cadenas, ya que esto coincidirá con lo que tu plataforma pone en la cadena.
La diferencia entre signed char
y unsigned char
es la que cabría esperar. En la mayoría de las plataformas, signed char
será un número de complemento a dos de 8 bits que va de -128
a 127
, y unsigned char
será un entero de 8 bits sin signo (de 0
a 255
). Tenga en cuenta que el estándar NO requiere que los tipos char
tengan 8 bits, sólo que sizeof(char)
devuelva 1
. Puedes obtener el número de bits de un char con CHAR_BIT
en limits.h
. Sin embargo, hoy en día hay pocas plataformas, si es que hay alguna, en las que esto sea algo más que 8
.
Hay un buen resumen de este tema aquí.
Como otros han mencionado desde que publiqué esto, es mejor usar int8_t
y uint8_t
si realmente quieres representar enteros pequeños.
El rango de signed char
es de -128 a 127; el rango de unsigned char
es de 0 a 255.
El tipo char
será equivalente a un char con signo o a un char sin signo, dependiendo del compilador, pero es un tipo distinto.
Si utiliza cadenas de estilo C, utilice simplemente char
. Si necesitas usar chars para la aritmética (bastante raro), especifica signed o unsigned explícitamente para la portabilidad.