Gibt es eine aktuelle 8-bit-integer-Datentyp in C++
In c++, insbesondere die cstdint header-Datei, gibt es Arten, die für 8-bit-Ganzzahlen, welche sich von der char-Datentyp mit typedef. Könnte jemand empfehlen, eine tatsächliche 8-bit-integer-Typ?
- en.cppreference.com/w/cpp/types/integer
- Wie ich es verstehe,
int8_t
garantiert eine 8-bit-Ganzzahl, wenn es definiert ist, bei alle. Die Tatsache, dass Ihre Implementierung typedef ist es alschar
(oder vielleichtsigned char
) bedeutet, dass Ihre Umsetzung istchar
ist in der Tat 8 bits. Beachten Sie, dasschar
und seine verwandten sind immer integer-Typen in C und C++; diese unterscheidet sich von einigen anderen Sprachen, die nicht behandeln, als Zeichen arithmetische Typen. - In der mehr gemeinsame Implementierungen
char
ist 8 bit. Wenn es nicht 8 bits, es wird nicht einestd::int8_t
. - Betrachten Sie es wie folgt:
char
ist die string-Charakter geben, und sollte nicht verwendet werden, für nichts anderes.unsigned char
undsigned char
sind als arithmetische Typen und sind nicht nützlich für string-Zeichen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, du hast Recht.
int8_t
unduint8_t
sindtypedef
zuchar
auf Plattformen, wo 1 byte ist 8 bit. Auf Plattformen, wo es nicht ist, die entsprechende definition gegeben werden.Folgende Antwort basiert auf der Annahme, dass der char ist
8 bits
char
hält 1 byte, die möglicherweisesigned
oderunsigned
basiert auf der Ausführung.So
int8_t
istsigned char
unduint8_t
istunsigned char
, aber das wird sicher zu verwenden int8_t/uint8_t als eigentliche 8-bit-Ganzzahl ohne sich zu sehr auf die Umsetzung.Für eine Durchführung Sicht
typedef
fing, wo char ist 8 bit macht Sinn.Haben alles gesehen, Es ist sicher zu bedienen
int8_t
oderuint8_t
als echte 8-bit-integer.int8_t
kann nicht ein typedef zuchar
auf Plattformen, in denenchar
ist weniger als 8 bits.char
ist 1 byte. Ist es nicht? Vielleicht brauche ich, um eine Rückbestätigung von mir 🙂 jetztchar
1 byte in der Tat, aber 1 byte ist nicht immer 8 bit, siehe z.B. this. Obwohl meine überzeugung ist, dassint8_t
ist nicht definiert für Plattformen, in denen ein byte nicht 8 bit.typedef
zuchar
. Erstens, diechar
Typ ist compiler-abhängig und kannunsigned
,signed
oderchar
. Einint8_t
ist einsigned
Menge unduint8_t
ist ein unsigned Menge. Sie kann nicht zugeordnet werden auf den gleichen Typ. Die einzige Garantie ist, dassint8_t
ist ein integer, mit Vorzeichen 8-bit unduint8_t
ist ein unsigned Ganzzahl, 8 bit breit.signed
oderunsigned
, aber nichtchar
.char
es.CHAR_BIT == 8
, so dass für jede Umgebung, die POSIX-kompatibel ist, oder hat ein Erbe, das so war, dannchar
werden 8 bits. Also für 99% von dem, was typisch ist (wie in: nicht embedded firmware, DSP und solche) Programme laufen in einer Umgebung, wo der char ist 8 bits.UCHAR_MAX
muss mindestens255
(von denen wir ableiten können, dass es müssen mindestens 8 bits)CHAR_BIT
(Nummer des bits für das kleinste Objekt, dass nicht ein bit-Feld (byte)) von mindestens 8. Dieser Teil der C-standard wird von der C++ - standard, der in 18.2.2.int8_t
unduint8_t
sind, wie angegeben, die von der C++ Spez.