Verschil tussen ondertekende / niet-ondertekende char

Dus ik weet dat het verschil tussen een signed inten unsigned intis dat een bit wordt gebruikt om aan te geven of het getal positief of negatief is, maar hoe werkt dit toepassen op een char? Hoe kan een karakter positief of negatief zijn?


Antwoord 1, autoriteit 100%

Er is geen speciaal “karaktertype” in C-taal. charis een integer-type, hetzelfde (in dat opzicht) als int, shorten andere integer-types. charis toevallig het kleinste gehele type. Dus, net als elk ander integer-type, kan het worden ondertekend of niet-ondertekend.

Het is waar dat (zoals de naam al doet vermoeden) charmeestal bedoeld is om tekens weer te geven. Maar karakters in C worden weergegeven door hun gehele “codes”, dus er is niets ongewoons aan het feit dat een geheel getal type charwordt gebruikt om dat doel te dienen.

Het enige algemene verschil tussen charen andere integer-types is dat gewoon charniet synoniem is met signed char, terwijl andere integer-types de signed-modifier is optioneel/impliciet.


Antwoord 2, autoriteit 38%

Ik ben het enigszins oneens met het bovenstaande. De unsigned charbetekent eenvoudig: gebruik de meest significante bit in plaats van deze te behandelen als een bitvlag voor +/- teken bij het uitvoeren van rekenkundige bewerkingen.

Het heeft betekenis als je charals een getal gebruikt, bijvoorbeeld:

typedef char BYTE1;
typedef unsigned char BYTE2;
BYTE1 a;
BYTE2 b;

Voor variabele azijn slechts 7 bits beschikbaar en het bereik is (-127 tot 127) = (+/-)2^7 -1.
Voor variabele bAlle 8 bits zijn beschikbaar en het bereik is 0 tot 255 (2 ^ 8 -1).

Als u charals teken gebruikt, wordt “Unsigned” volledig genegeerd door de compiler, net zoals opmerkingen uit uw programma worden verwijderd.


Antwoord 3, Autoriteit 15%

Er zijn drie tekensoorten: (gewoon) char, signed charen unsigned char. Elke Char is meestal een 8-bits geheel getal * en in die zin, een signeden unsigned charhebben een bruikbare betekenis (in het algemeen equivalent aan uint8_ten int8_t). Wanneer gebruikt als een teken in het gevoel van tekst, gebruikt u een char(ook wel een gewenste char) genoemd). Dit is typisch een signed char, maar kan elke wijze door de compiler worden geïmplementeerd.

* Technisch gezien kan een char enig grootte zijn zolang sizeof(char)IS 1, maar het is meestal een 8-bits geheel getal.


Antwoord 4, Autoriteit 11%

Vertegenwoordiging is hetzelfde, de betekenis is anders. E.g, 0xff, het vertegenwoordigde beide als “FF”. Wanneer het wordt behandeld als “Char”, is het negatief nummer -1; Maar het is 255 als niet-ondertekend. Als het gaat om een ​​beetje schakelen, is het een groot verschil omdat het tekenbit niet wordt verschoven. E.G, als je 255 rechts 1 bit verschuift, krijgt het 127; Schakelen “-1” -recht is geen effect.


Antwoord 5, Autoriteit 9%

A signed charis een ondertekende waarde die typisch kleiner is dan, en is gegarandeerd niet groter dan, een short. Een unsigned charis een niet-ondertekende waarde die typisch kleiner is dan, en is gegarandeerd niet groter dan, een short. Een type charZONDER A signedof unsignedKwalificator kan zich gedragen als een ondertekend of niet-ondertekend char; Dit is meestal implementatie-gedefinieerd, maar er zijn een paar gevallen waarin het niet is:

  1. Als, in de tekenset van het doelplatform, een van de tekens vereist door standaard C zou verwijzen naar een code die hoger is dan het maximum `signed char`, dan moet `char` unsigned zijn.
  2. Als `char` en `short` even groot zijn, moet `char` worden ondertekend.

Een van de redenen waarom er twee dialecten van “C” zijn (die waar charis ondertekend, en die waar het niet ondertekend is) is dat er enkele implementaties zijn waar charmoetenongetekend zijn, en andere waar moetworden ondertekend.


Antwoord 6

Dit omdat een charbij alle effecten wordt opgeslagen als een 8-bits getal. Spreken over een negatief of positief charheeft geen zin als je het als een ASCII-code beschouwt (die gewoon kan worden ondertekend*), maar is logisch als je dat chargebruikt om sla een getal op, dat in het bereik 0-255 of in -128..127 kan liggen volgens de 2-complementweergave.

*: het kan ook ongetekend zijn, het hangt eigenlijk af van de implementatie denk ik, in dat geval heb je toegang tot uitgebreide ASCII-tekenset die wordt geboden door de gebruikte codering


Antwoord 7

Op dezelfde manier waarop een intpositief of negatief kan zijn. Er is geen verschil. Eigenlijk is op veel platforms ongekwalificeerde charondertekend.


Antwoord 8

Op dezelfde manier — bijv. als je een 8-bits char hebt, kunnen 7 bits worden gebruikt voor magnitude en 1 voor teken. Dus een niet-ondertekende char kan variëren van 0 tot 255, terwijl een ondertekende char kan variëren van -128 tot 127 (bijvoorbeeld).

Other episodes