Wat is een niet-ondertekende char?

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.

Commentaren (3)

Als je een karakter als een klein integer wilt gebruiken, is de veiligste manier om dat te doen met de int8_t en uint8_t types.

Commentaren (2)

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.

Commentaren (0)