In C/C++, a cosa serve un unsigned char
? Come è diverso da un normale char
?
Questo dipende dall'implementazione, poiché lo standard C NON definisce il signed-ness di char
. A seconda della piattaforma, char può essere signed
o unsigned
, quindi devi chiedere esplicitamente signed char
o unsigned char
se la tua implementazione dipende da questo. Usa semplicemente char
se intendi rappresentare caratteri da stringhe, poiché questo corrisponderà a ciò che la tua piattaforma mette nella stringa.
La differenza tra signed char
e unsigned char
è come ci si aspetta. Sulla maggior parte delle piattaforme, il signed char
sarà un numero a due bit complementare a 8 bit che va da -128
a 127
, e il unsigned char
sarà un intero senza segno a 8 bit (da 0
a 255
). Notate che lo standard NON richiede che i tipi char
abbiano 8 bit, solo che sizeof(char)
restituisca 1
. Puoi ottenere il numero di bit in un char con CHAR_BIT
in limits.h
. Ci sono poche se non nessuna piattaforma oggi dove questo sarà qualcosa di diverso da 8
, però.
C'è un bel riassunto di questo problema qui.
Come altri hanno menzionato da quando ho postato questo, è meglio usare int8_t
e uint8_t
se volete davvero rappresentare piccoli numeri interi.
Il signed char
ha un range da -128 a 127; il unsigned char
ha un range da 0 a 255.
char
sarà equivalente a signed char o unsigned char, a seconda del compilatore, ma è un tipo distinto.
Se stai usando stringhe in stile C, usa semplicemente char
. Se hai bisogno di usare i char per l'aritmetica (abbastanza raro), specifica esplicitamente signed o unsigned per la portabilità.