Em C/C++, para que é utilizado um "charuto não assinado"? Em que é diferente de um "char" normal?
Isso depende da implementação, pois o padrão C NÃO define o "assinar-ness" do char
. Dependendo da plataforma, char pode ser signed
ou unsigned
, então você precisa perguntar explicitamente por signed char
ou unsigned char
se a sua implementação depende disso. Basta utilizar char
se você pretende representar caracteres de strings, pois isso irá corresponder ao que a sua plataforma coloca na string.
A diferença entre "char assinado" e "char não assinado" é como você'd esperaria. Na maioria das plataformas, signed char
será um complemento de 8-bit two's que varia de -128
a 127
, e unsigned char
será um inteiro de 8-bit unsigned (0
a 255
). Note que o padrão NÃO requer que os tipos char
tenham 8 bits, apenas que sizeof(char)
retornem 1
. Você pode obter o número de bits em um char com CHAR_BIT
em limits.h
. Existem poucas ou nenhumas plataformas hoje em dia onde isso será algo diferente de 8
, no entanto.
Há um bom resumo desta edição aqui.
Como outros mencionaram desde que eu postei isso, você'é melhor usar int8_t
e uint8_t
se você realmente quer representar pequenos inteiros.
O 'char assinado' tem intervalo de -128 a 127; o 'char não assinado' tem intervalo de 0 a 255.
O char
será equivalente a char assinado ou char não assinado, dependendo do compilador, mas é um tipo distinto.
Se você'estiver usando cordas no estilo C, basta usar char
. Se você precisa usar chars para aritmética (bem raro), especifique explicitamente para portabilidade, com ou sem assinatura.