Frage zu Standard und POD's



  • 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