Waar wordt in C/C++ een unsigned char
voor gebruikt? Wat is het verschil met een gewone char
?
Dit is implementatie-afhankelijk, omdat de C standaard NIET bepaalt of char
ondertekend is. Afhankelijk van het platform, kan char signed
of unsigned
zijn, dus je moet expliciet vragen om signed char
of unsigned char
als je implementatie daarvan afhankelijk is. Gebruik char
als je tekens uit strings wilt weergeven, omdat dit overeenkomt met wat je platform in de string zet.
Het verschil tussen signed char
en unsigned char
is zoals je'zou verwachten. Op de meeste platformen zal signed char
een 8-bits two's complement getal zijn van -128
tot 127
, en unsigned char
zal een 8-bits unsigned integer zijn (0
tot 255
). Merk op dat de standaard NIET vereist dat char
types 8 bits hebben, alleen dat sizeof(char)
1
teruggeeft. Je kunt het aantal bits in een char bepalen met CHAR_BIT
in limits.h
. Er zijn tegenwoordig weinig of geen platformen waar dit iets anders is dan 8
, hoewel.
Er is een mooie samenvatting van dit probleem hier.
Zoals anderen al opmerkten sinds ik dit postte, kun je beter int8_t
en uint8_t
gebruiken als je echt kleine gehele getallen wilt representeren.
signed char
heeft een bereik van -128 tot 127; unsigned char
heeft een bereik van 0 tot 255.
char
is equivalent aan ofwel signed char ofwel unsigned char, afhankelijk van de compiler, maar is een apart type.
Als je C-stijl strings gebruikt, gebruik dan char
. Als je chars moet gebruiken voor rekenkundige bewerkingen (vrij zeldzaam), specificeer dan expliciet ondertekend of niet-ondertekend voor portabiliteit.