Frage

Was ist die Beziehung zwischen Wortlänge, Zeichengröße, integer Größe und Byte in C ++?

War es hilfreich?

Lösung

Der Standard verlangt, dass bestimmte Typen haben Minimum Größen (kurz sind mindestens 16 Bit, int mindestens 16 Bit, usw.), und dass einige Gruppen des Typs bestellt werden (sizeof(int)> = sizeof(short) > = sizeof(char)).

Andere Tipps

In C ++ ein char muß groß genug sein, jedes Zeichen in der Basiszeichensatz der Implementierung zu halten.

int hat die „natürliche Größe durch die Architektur der Ausführungsumgebung vorgeschlagen“. Beachten Sie, dass dies bedeutet, dass ein int tut nicht müssen mindestens 32-Bit groß sein. Implementationen wo int ist 16 Bit üblich sind (man denke ot MS-DOS embedded).

Die folgenden stammen aus verschiedenen Teilen der C ++ 98 und C99-Standards:

  • long int mindestens so groß wie int
  • sein
  • int mindestens so groß wie short
  • sein
  • short mindestens so groß wie char
  • sein

Beachten Sie, dass sie alle könnten gleich groß sein.

Auch (unter der Annahme einer Ergänzung Implementierung der zwei):

  • long int hat mindestens 32-Bit
  • sein
  • int hat mindestens 16 Bit
  • sein
  • short hat mindestens 16 Bit
  • sein
  • char hat mindestens 8 Bit
  • sein

Die Standard-weiß nicht, dieses „Wort“ von Prozessoren verwendet THINGY. Aber es sagt der Typ „int“ sollte die natürliche Größe für eine Ausführungsumgebung hat. Aber auch für 64-Bit-Umgebungen, int ist in der Regel nur 32 Bit. So „Wort“ in Standardbedingungen hat so ziemlich keine gemeinsame Bedeutung (mit Ausnahme des gemeinsamen englischen „Wort“ natürlich).

Zeichengröße ist die Größe eines Zeichens. Hängt davon ab, welchen Charakter man darüber reden. Zeichentypen sind char, unsigned char und signed char. Auch Wchar_t verwendet wird, Zeichen zu speichern, die eine beliebige Größe haben kann (bestimmt durch die Umsetzung - aber muss eine der Integer-Typen wie die ihr zugrunde liegenden Typ verwenden Ähnlich wie Aufzählungen.), Während char / signed char oder unsigned char hat ein Byte haben. Das bedeutet, dass ein Byte hat so viel Bits als ein Zeichen hat. Wenn eine Implementierung sagt ein Objekt vom Typ char hat 16 Bits, dann ein Byte hat zu 16 Bit.

Nun wird ein Byte ist die Größe, dass ein Zeichen einnimmt. Es ist eine Einheit, nicht einige spezifische Art. Es gibt nicht viel mehr darüber, nur, dass es das Gerät, dass Sie den Speicher zugreifen können. Das heißt Sie keinen Zeiger Zugriff auf Bit-Felder haben, aber Sie haben Zugriff auf Einheiten in einem Byte beginnen.

„Integer Größe“ ist jetzt ziemlich breit. Was meinst du? Alle Bool, char, sind kurz, int, long und ihre unsinged Pendants ganzen Zahlen. Ihre Reichweite ist, was ich nennen würde „integer Größe“, und es ist in dem C-Standard dokumentiert - übernommen von dem C ++ Standard. Für char Bereich unterzeichnet ist von -127 <-> 127, für kurze und int es die gleiche ist und -2 ^ 15 + 1 <-> 2 ^ 15-1 und für lange ist es -2 ^ 31 + 1 < -> 2 ^ 31-1. Ihre unsigned Pendants im Bereich von 0 bis 2 ^ 8-1, 2 ^ 16-1 und 32-1 jeweils 2 ^. Das sind jedoch minimal Größen. Das heißt, eine maximale Größe nicht int 2 ^ 14 auf jeder Plattform haben kann, da die kleiner als 2 ^ 15-1 natürlich. Daraus folgt für die Werte, die ein Minimum von Bits erforderlich ist. Für char, die 8 für kurze / int ist, die 16 ist und für lange ist, dass 32 Zweierkomplement-Darstellung für negative Zahlen ist nicht erforderlich, weshalb der negativer Wert ist nicht statt -128 ist -127 zum Beispiel für signed char.

Standard C ++ nicht über einen Datentyp namens word oder byte. Der Rest ist als Bereiche definiert. Die Basis ist ein char die aus CHAR_BITS Bits aufweist. Der am häufigsten verwendeten Wert von CHAR_BITS ist 8.

sizeof (char) == 1 (ein Byte) (in C ++, in C - keine Angabe)
sizeof (int)> = sizeof (char)
Wort - nicht c ++ Typ, usualy in Computer-Architektur bedeutet es 2 Bytes

Art hängt von ab, was Sie durch die Beziehung bedeuten. Die Größe der numerischen Typen ist in der Regel ein Vielfaches der Maschinenwortgröße. Ein Byte ist ein Byte, ein Byte - 8 Bits, nicht mehr und nicht weniger. Ein Zeichen wird im Standard als ein einziges Byte ohne Vorzeichen definiert I (überprüfen Sie Ihre ARM für weitere Details) glauben.

Die allgemeine Regel ist, macht keine Annahmen über die tatsächliche Größe der Datentypen. Die Norm legt die Beziehungen zwischen den Arten, wie beispielsweise einem „lange“ integer entweder gleich groß oder größer ist als ein „int“ sein. Einzelne Implementierungen der Sprache werden spezielle Größen für die Typen auswählen, die für sie bequem sind. Zum Beispiel kann ein Compiler für einen 64-Bit-Prozessor unterschiedliche Größen als ein Compiler wählt für einen 32-Bit-Prozessor.

Sie können die sizeof () Operator verwenden, um die spezifischen Größen für den Compiler (auf die spezifische Zielarchitektur) Sie verwenden zu untersuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top