Frage zu Standard und POD's



  • Hallo,
    schreibt der C++ Standard vor, welcher Datentyp benutzt wird für:
    - den "Rückgabetyp" von sizeof
    - array indices?

    Ist das unsigned int? unsigned long? std::size_t? Das macht zwar in der Praxis keinen Unterschied, aber mich interessiert das gerade 😃



  • Besorg dir das Standard-Dokument und guck nach.

    Ich tippe mal darauf dass es ein size_t sein muss. Wobei size_t wiederum ein Typedef ist, und sicherlich oft auf unsigned int oder unsigned long verweist.



  • sizeof:

    ISO/IEC 14882:2003(E) --- 5.3.3 Sizeof schrieb:

    6. The result is a constant of type size_t. [Note: size_t is defined in the standard header <cstddef>(18.1). ]

    Dort steht übrigens auch, dass sizeof bool nicht zwangsläufig 1 sein muss - bool kann also größer sein als char ist Oo

    Bei Array Indices wird das ähnlich sein...

    bb



  • Hallo,

    gibt es eine Möglichkeit eigenen Datentypen eine genaue Größe (in Bit) zuzuweisen?
    Also der Standard macht ja (afaik) in der Regel nur Aussagen zu Mindestgrößen.

    Ich dachte dabei an einen Datentyp, der exakt 8 bits ist.
    char ist ja mindestens 8bit groß, oder? Aber nicht genau...

    Gruß,
    Newbie



  • Sorry...

    Sollte nen eigener Thread werden...



  • wozu sollte man das wollen?
    aber lt. standard ist char genau 8bit groß:

    ISO/IEC 14882:2003(E) --- 5.3.3 Sizeof schrieb:

    1. The sizeof operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is not evaluated, or a parenthesized type-id. The sizeof operator shall not be applied to an expression that has function or incomplete type, or to an enumeration type before all its enumerators have been declared, or to the parenthesized name of such types, or to an lvalue that designates a bit-field. sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined. [Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.69) ] [Note: See 1.7 for the definition of byte and 3.9 for the definition of object representation. ]

    bb



  • nope. ein char ist genau ein byte gross, wobei der standard byte nicht genau definiert. ein C++ byte muss nicht 8 bit haben. kann auch 24 bit haben oder 32 oder 17 oder...

    Newbie19 schrieb:

    Hallo,
    gibt es eine Möglichkeit eigenen Datentypen eine genaue Größe (in Bit) zuzuweisen?
    Also der Standard macht ja (afaik) in der Regel nur Aussagen zu Mindestgrößen.

    wenn es einen typ gibt der genau 8 bit gross ist, dann sieht der kommende standard AFAIK vor dass es typedefs namens int8_t bzw. uint8_t gibt.
    wenn nicht, dann gibt es diese typedefs eben nicht, und du hast ein problem.

    ansonsten kannst du noch bit-fields verwenden.


  • Mod

    unskilled schrieb:

    aber lt. standard ist char mindestens 8bit groß:

    Fixed that for you.



  • SeppJ schrieb:

    unskilled schrieb:

    aber lt. standard ist char mindestens 8bit groß:

    Fixed that for you.

    ty - war mir neu, dass die anzahl der bits pro byte nicht festgeschrieben ist



  • Den Begriff "Byte" definiert scheinbar jeder Autor nach seinem Gusto. Natürlich auch abhänging von dem Gebiet auf dem er tätig ist.

    Sehr geläufig ist es ein Byte als eine Gruppe von 8 Bits zu sehen. Würde sogar meinen kleinen Zeh dafür ins Feuer legen, dass es dazu eine DIN-Norm gibt.

    Der C++-Standard verweist aber auf die "Konstante" CHAR_BIT aus dem C-Standard und dort steht nur, dass CHAR_BIT mindestens 8 Bit groß sein muss.

    Sehr chaotisch.



  • Mitleid schrieb:

    Den Begriff "Byte" definiert scheinbar jeder Autor nach seinem Gusto. Natürlich auch abhänging von dem Gebiet auf dem er tätig ist.

    Sehr geläufig ist es ein Byte als eine Gruppe von 8 Bits zu sehen. Würde sogar meinen kleinen Zeh dafür ins Feuer legen, dass es dazu eine DIN-Norm gibt.

    Tu das, aber wunder dich nicht wenns weh tut und nach verbranntem Fleisch stinkt. Definitionen gibts allerdings verschiedene, der größte gemeinsame Nenner bei allen ist aber vermutlich sowas wie "kleinste adressierbare Datenmenge eines Systems". Die Definition von Pointern und der Größe von char im C++-Standard ist so gehalten, dass man die Größe von char als 1 Byte bezeichnen kann (AFAIK erwähnt der Standard selbst nie den Begriff "byte")

    Der C++-Standard verweist aber auf die "Konstante" CHAR_BIT aus dem C-Standard und dort steht nur, dass CHAR_BIT mindestens 8 Bit groß sein muss.

    Sehr chaotisch.

    Keineswegs. Es gibt Systeme, deren Hardware eine Adressierung von 8-Bit-Einheiten schlicht nicht erlaubt. Wenn man die Größe eines char auf 8 Bit festnageln wollte, wäre es umöglich, für solche zugegebenermaßen exotische Systeme einen standardkonformen C- oder C++ Compiler zu implementieren. Vor kurzem bin ich über die Spezifikation eines Computers für Hochenergiephysik-Anlagen gestoßen (weiß nicht mehr genau was und wo), dessen Bytes 16 Bit groß sind. Für das Teil gabs einen C++-Compiler, mit sizeof(short) = 4 (64 Bit), sizeof(int) = 16 (256 Bit) - alles etwas größer eben als vom heim-PC gewohnt, aber durchaus standardkonform.



  • //humoresken beitrag gelöscht



  • Mitleid schrieb:

    Viele Systeme "adressieren" überhaupt nichts.

    Hä?



  • hustbaer schrieb:

    Hä?

    Na ja, z.B. bei einer Algorithmenbeschreibung zur Kanalkodierung.

    Du könntest schreiben: Man nehme die ersten 3 Bit und ergänze sie durch Nullen zu einem Byte. Die nächsten 4 Bits ignoriere man usw. usw. ...

    @pumuckle
    Leider hat der mächtige Despot volkard meinen Beitrag gekillt. Daher nochmal die Argumente in Kurzfassung:

    - Der Begriff "Byte" wird in der Fachliteratur nicht einheitlich verwendet.

    - "kleinste adressierbare Datenmenge eines Systems" ist nicht der größte gemeinsame Nenner der gängigen Definitionen

    - gebräuchlich und häufig verwendet ist die schlichte Definition von einem Byte als die Zusammenfassung von 8 Bit (z.B. Duden Informatik, und unzählige andere Lehrbücher - auch zur Computerachitektur)

    - Im C++-Standard wird "Byte" in Paragraf 5.3.3 erwähnt bei der Definition von Sizeof

    - Die Bemerkung "sehr chaotisch" war nicht auf den C++-Standard bezogen, daher ist mir schon klar, dass C- bzw. C++-Compiler für gewisse Architekturen CHAR_BIT größer als 8 werden lassen.



  • Verschiedene Begriffe hinter dem Wort Byte stecken.
    Deswegen ist ja auch in verschiedenen Kontexten was anderes gemeint. Schon vor tausenden von Jahren meinte der Hardwaremann damit 10 Transistoren, während der Softwaremann damit 8 Bits meinte. Damals war zu lesen "8 Bit (bzw. 10 Bit, wovon 2 für die interne Verwaltung benötigt werden)", weil sie es auch nicht getrennt hatten.
    http://de.wikipedia.org/wiki/Byte
    Und "Duden Informatik" ist keine nennenswerte Quelle, fürchte ich.



  • Normal kann man drauf scheißen, dass es Systeme geben kann bei denen ein Byte nicht 8 Bit groß ist, auch wenn es hier ein paar Klugscheißer gibt die immer wieder darauf aufmerksam machen müssen. Für 99.9% aller Programme ist ein Byte 8 Bit groß.



  • volkard schrieb:

    ...

    Genau das meinte ich mit "sehr chaotisch" und deshalb ist es ja kein Wunder, dass viele 8 Bit annehmen (auch weil sie es so beigebracht bekommen) und später verwundert sind wieviele Bedeutungen der Begriff "Byte" eigentlich hat (manchaml unterscheidet man sogar Byte und byte). Zumal der Kontext ja auch nicht immer sooo unterschiedlich ist, wie du es darstellst.

    volkard schrieb:

    Und "Duden Informatik" ist keine nennenswerte Quelle, fürchte ich.

    Dann stehen die Schinken also aus ästhetischen Gründen in fast jedem Büro von Professoren und anderen Fachleuten? 😉



  • Mitleid schrieb:

    hustbaer schrieb:

    Hä?

    Na ja, z.B. bei einer Algorithmenbeschreibung zur Kanalkodierung.

    Du könntest schreiben: Man nehme die ersten 3 Bit und ergänze sie durch Nullen zu einem Byte. Die nächsten 4 Bits ignoriere man usw. usw. ...

    Hä? 😉



  • hustbaer schrieb:

    Hä? 😉

    Das Thema ist zu banal und unwichtig um weitere Erklärungen abzugeben. Wenn du nicht verstehst was ich meine, ignoriere die Aussage einfach. 😉



  • Mitleid schrieb:

    hustbaer schrieb:

    Hä? 😉

    Das Thema ist zu banal und unwichtig um weitere Erklärungen abzugeben. Wenn du nicht verstehst was ich meine, ignoriere die Aussage einfach. 😉

    Ich glaube schon dass ich verstehe was du meinst. Nur dass wir hier von C++ reden. Und da wird adressiert. Auf jedem System.


Anmelden zum Antworten