Verpflichtet C-Norm es? Gibt es eine Plattform, bei der die Anzahl der Bits in einem Byte nicht der Anzahl der Bits in einem Typ char
entspricht?Ist die Anzahl der Bits in einem Byte gleich der Anzahl der Bits in einem Typ-Zeichen?
Antwort
Ja. Beide sind gleich CHAR_BIT
*.
C-Standard definiert CHAR_BIT
als: "Anzahl der Bits für das kleinste Objekt, das kein Bitfeld (Byte) ist". c99 sagt explizit: "Ein Byte enthält CHAR_BIT
Bits."
"UCHAR_MAX
gleich sind 2 CHAR_BIT
-1" - es bedeutet unsigned char
erfordert mindestensCHAR_BIT
Bits (char_bits >= CHAR_BIT
).
sizeof(char) == 1
(single-Byte-Zeichen paßt in einem Byte), das heißt, Typ char
erfordert höchstensCHAR_BIT
Bits (char_bits <= CHAR_BIT
).
Von char_bits >= CHAR_BIT
und char_bits <= CHAR_BIT
folgt, dass char_bits == CHAR_BIT
(keine Padding-Bits).
POSIX says it explicitly: "CHAR_BIT
Anzahl der Bits in einem Typ char
"
*: Wenn char
unterzeichnet und CHAR_BIT > 8
dann (ohne die $6.2.6.2
Zitat unten) war es nicht klar, ob SCHAR_MIN..SCHAR_MAX
Bereich alle CHAR_BIT
Bits umfasst. Obwohl der Name CHAR_BIT
die Absicht klar kommuniziert ("Anzahl der Bits in char
").
c11 sagt ($6.2.6.2
in n1570 Entwurf): "signed char
soll keine Füllbits haben. Es soll genau ein Vorzeichenbit sein."
Von $6.2.5.15
:
Die Umsetzung wird
char
definieren den gleichen Bereich haben, Darstellung und das Verhalten entweder alssigned char
oderunsigned char
es folgen: Alle CHAR_BIT
Bits verwendet werden, um repräsentieren CHAR_MIN..CHAR_MAX
Bereich (weil beide signed
und unsigned char
Typ alle Bits verwenden).
Zum Vergleich, im Gegensatz zu char
; _Bool
kann wenige Bits verwenden $6.7.2.1.4(122)
:
Während die Anzahl der Bits in einem
_Bool
Objekt zumindestCHAR_BIT
, die Breite (Anzahl von Vorzeichen und Wert-Bits) ein_Bool
kann nur 1 Bit sein.
Leider kann ich keine neue Antwort hinzufügen, da die Frage geschlossen ist, aber in der Tech-Übersicht für den C55x begraben: http://www.ti.com/lit/ug/spru393/spru393.pdf kann man das sehen Das System ist für Byte-Größen von 8-48 Bits konfigurierbar (einige 54x-Serien bieten keine 8-Bit, aber ich konnte keine öffentlichen Dokumente finden). Die "neuen" c99-kompatiblen Tools machen "CHAR_BIT == 8" und "sizeof char == 1", weil das der Standard sagt (na ja, "sizeof char" war per Definition immer 1), aber die Byte-Größe in der CPU ist in den meisten Fällen immer noch nicht 8 Bit, und dies wirkt sich auf den Speicher, den Sie zuweisen, und den Code, den Sie schreiben. –
@NickBastin: Sie können jetzt Antwort hinzufügen. – jfs
@NickBastin: ISO C erlaubt jeden Wert> = 8 für 'CHAR_BIT'. POSIX benötigt 'CHAR_BIT == 8'. Beide benötigen 'sizeof (char) == 1'. –
- 1. Berechnung der Anzahl der in Byte gesetzt Bits
- 2. Anzahl der gesetzten Bits in einem Char bestimmen
- 3. Anzahl der Bits in Javascript-Nummern
- 4. x86 - Anzahl der Register vs Anzahl der reservierten Bits
- 5. Warum ist es nützlich, die Anzahl der Bits zu zählen?
- 6. Suche n Anzahl der Bits in eine Datei (C++)
- 7. Berechnen der Anzahl der Bits und der Anzahl der Wörter BigInteger
- 8. Wie verteilt man Bits in einem Byte?
- 9. C++ - Anzahl der Bits pro Pixel aus BMP-Datei lesen
- 10. Anzahl der Hosts in einem Subnetz
- 11. Python: Bits aus einem Byte Extrahierung
- 12. Anzahl der Entitäten immer gleich der Anzahl der Datenbanktabellen?
- 13. Grabbing n Bits aus einem Byte
- 14. Bits Erhalten von Byte
- 15. Überprüfen einzelner Bits in einem Byte-Array in Java?
- 16. Kann sich die Endiannität auf die Reihenfolge der Bits in einem Byte beziehen?
- 17. Anzahl der Rotverschiebungen Anzahl der Montage in einem bestimmten Zeitraum
- 18. Suche nach der Anzahl der Elemente kleiner oder gleich in einem multiset
- 19. Lesen Bits aus der Datei
- 20. Berechnung der Bits benötigt
- 21. Anzahl der Elemente in einem Kanal
- 22. Ansatz zum Lesen einer beliebigen Anzahl von Bits in Swift
- 23. wie die Anzahl der Bits berechnet werden, um ein Wort im direkt abgebildeten Cache zu adressieren
- 24. Ermittlung der Anzahl der Bits, die sich geändert haben (bitweiser Operator)
- 25. Java Iterate-Bits in Byte-Array
- 26. Umkodierung Werte in einem Vektor, der die Anzahl der Paare von der gleichen Anzahl in einem anderen Vektor
- 27. Was ist die Alternative zu u32 :: BITS in einem const?
- 28. Bits in einem Integer in Python ändern
- 29. Anzahl der Punkte in einem Bild
- 30. Anzahl der Aufgaben, die nicht gleich Anzahl der Partitionen in Spark-
Diese könnten auch von Interesse sein: http://StackOverflow.com/Questions/2098149/What-Platforms-Have-Something-other-than-8-bit-char und http://StackOverflow.com/questions/5516044/system-where-1-byte-8-bit (beantwortet die Frage nicht vollständig). – cdarke
Wieder geöffnet. Diese Frage unterscheidet sich von den 8 Bits in einem Byte-Duplikat: Es geht nicht um etwas, was 8 Bits entspricht, sondern um etwas, das die gleiche Anzahl von Bits wie etwas anderes hat. – Bathsheba
@cdarke: um klar zu sein, diese Frage ist nicht, was 'CHAR_BIT' Wert ist. Es geht darum, ob Sie * alle * Bits in einem Byte benötigen, um 'char' Werte darzustellen (keine Füllbits). – jfs