Dus ik weet dat het verschil tussen een signed int
en unsigned int
is 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. char
is een integer-type, hetzelfde (in dat opzicht) als int
, short
en andere integer-types. char
is 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) char
meestal 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 char
wordt gebruikt om dat doel te dienen.
Het enige algemene verschil tussen char
en andere integer-types is dat gewoon char
niet 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 char
betekent 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 char
als een getal gebruikt, bijvoorbeeld:
typedef char BYTE1;
typedef unsigned char BYTE2;
BYTE1 a;
BYTE2 b;
Voor variabele a
zijn slechts 7 bits beschikbaar en het bereik is (-127 tot 127) = (+/-)2^7 -1.
Voor variabele b
Alle 8 bits zijn beschikbaar en het bereik is 0 tot 255 (2 ^ 8 -1).
Als u char
als 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 char
en unsigned char
. Elke Char is meestal een 8-bits geheel getal * en in die zin, een signed
en unsigned char
hebben een bruikbare betekenis (in het algemeen equivalent aan uint8_t
en 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 char
is een ondertekende waarde die typisch kleiner is dan, en is gegarandeerd niet groter dan, een short
. Een unsigned char
is een niet-ondertekende waarde die typisch kleiner is dan, en is gegarandeerd niet groter dan, een short
. Een type char
ZONDER A signed
of unsigned
Kwalificator 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:
- 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.
- Als `char` en `short` even groot zijn, moet `char` worden ondertekend.
Een van de redenen waarom er twee dialecten van “C” zijn (die waar char
is ondertekend, en die waar het niet ondertekend is) is dat er enkele implementaties zijn waar char
moetenongetekend zijn, en andere waar moetworden ondertekend.
Antwoord 6
Dit omdat een char
bij alle effecten wordt opgeslagen als een 8-bits getal. Spreken over een negatief of positief char
heeft geen zin als je het als een ASCII-code beschouwt (die gewoon kan worden ondertekend*), maar is logisch als je dat char
gebruikt 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 int
positief of negatief kan zijn. Er is geen verschil. Eigenlijk is op veel platforms ongekwalificeerde char
ondertekend.
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).