548 Stimmen

Was ist ein Zeichen ohne Vorzeichen?

In C/C++, was eine unsigned char verwendet wird? Wie unterscheidet sie sich von einer normalen char ?

11voto

munna Punkte 133

unsigned char nimmt nur positive Werte an....like 0 まで 255

wobei als

signed char nimmt sowohl positive als auch negative Werte an....like -128 まで +127

10voto

Zac Gochenour Punkte 243

Eine unsigned char ist ein Byte-Wert ohne Vorzeichen (0 bis 255). Sie denken dabei vielleicht an char ein "Zeichen" zu sein, aber in Wirklichkeit ist es ein numerischer Wert. Die reguläre char ist vorzeichenbehaftet, d. h. es gibt 128 Werte, und diese Werte werden mithilfe der ASCII-Kodierung auf Zeichen abgebildet. Aber in jedem Fall ist das, was Sie im Speicher speichern, ein Byte-Wert.

0 Stimmen

"Das reguläre Zeichen ist vorzeichenbehaftet": Nein, das hängt von der Implementierung ab. Und es gibt keine Garantie, dass der Wertebereich eines vorzeichenlosen Zeichens von 0 bis 255 reicht: Er ist mindestens so groß, könnte aber auch größer sein.

0 Stimmen

char ist nicht garantiert, dass es ein Byte ist.

10voto

bk1e Punkte 23191

char y unsigned char sind nicht garantiert 8-Bit-Typen auf allen Plattformen - sie sind garantiert 8-Bit oder größer. Einige Plattformen haben 9-Bit-, 32-Bit- oder 64-Bit-Bytes . Die heute gebräuchlichsten Plattformen (Windows, Mac, Linux x86, usw.) haben jedoch 8-Bit-Bytes.

9voto

Julienne Walker Punkte 159

Bei direkten Werten wird ein reguläres Zeichen verwendet, wenn bekannt ist, dass die Werte zwischen CHAR_MIN y CHAR_MAX während ein Zeichen ohne Vorzeichen den doppelten Bereich am positiven Ende bietet. Zum Beispiel, wenn CHAR_BIT ist 8, der Bereich der regelmäßigen char ist nur garantiert [0, 127] (weil es mit oder ohne Vorzeichen sein kann), während unsigned char wird [0, 255] sein und signed char wird [-127, 127] sein.

Die Standards erlauben es, POD-Objekte (plain old data) direkt in ein Array von unsigned char zu konvertieren. So können Sie die Darstellung und die Bitmuster des Objekts untersuchen. Die gleiche Garantie für sicheres Type Punning gibt es nicht für char oder signed char.

0 Stimmen

In den meisten Fällen wird es [-128, 128] sein.

0 Stimmen

Die Standards definieren die Objektdarstellung nur formal als eine Reihenfolge de unsigned char , nicht ein Array spezifisch, & jede "Umwandlung" wird nur formell definiert durch Kopieren von vom Objekt zu einem echten, deklarierten Array de unsigned char & und dann die Prüfung des letzteren. Es ist nicht klar, ob das ODER direkt als ein solches Array reinterpretiert werden kann, mit den damit verbundenen Möglichkeiten der Zeigerarithmetik, d.h. ob "sequence" == "Array" in dieser Verwendung. Es wurde ein Core Issue #1701 eröffnet, in der Hoffnung, dies zu klären. Zum Glück, da diese Zweideutigkeit mich in letzter Zeit wirklich nervt.

2 Stimmen

@RastaJedi Nein, das wird es nicht. Es kann nicht. Ein Bereich von -128...+128 ist physikalisch unmöglich mit 8 Bits darzustellen. Diese Breite unterstützt nur 2^8 == 256 diskrete Werte, aber -128...+128 = 2 * 128 + 1 für 0 = 257. Die Vorzeichen-Magnituden-Darstellung erlaubt -127...+127, hat aber 2 (bipolare) Nullen. Die Zweierkomplement-Darstellung behält eine einzige Null bei, gleicht aber den Bereich durch einen weiteren Wert auf der negativen Seite aus; sie erlaubt -128...+127. (Und so weiter für beide bei größeren Bitbreiten.)

8voto

ugasoft Punkte 3552

unsigned char ist das Herzstück aller Bit-Tricksereien. In fast alle Kompilierer für alle Plattformen und unsigned char ist einfach ein Byte und eine vorzeichenlose Ganzzahl von (normalerweise) 8 Bits, die als kleine Ganzzahl oder als Bitpaket behandelt werden kann.

Außerdem, wie schon jemand anderes gesagt hat, definiert die Norm nicht das Vorzeichen eines Zeichens. Sie haben also 3 verschiedene char Typen: char , signed char , unsigned char .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X