U32, U16, U8

Moderator Persönliche Seite #4786855
Lesenswert?

Huh schrieb:
> Das steht in der "inttypes.h"

Nein, da stehen Typnamen wie uint8_t, uint16_t, uint32_t.

Die U8 etc. sind Erfindungen von wer auch immer die Software gezimmert
hat, die das verwendet.

Allerdings sollte man sie mit <inttypes.h> einfach emulieren können:
1
#include <inttypes.h>
2

3
#define U8 uint8_t
4
#define U16 uint16_t
5
#define U32 uint32_t
Gast #4787073
Lesenswert?

Jörg W. schrieb:
> Allerdings sollte man sie mit <inttypes.h> einfach emulieren können:

und du meinst, uint8_t ist lesbarer als U8 ?

Abgesehen davon ist das auch bloß ein unsigned char und sonst nix.

Ich halte das für ein vorgezogenes Freitagsthema und benutze ungeniert 
byte, word und dword. Paßt viel besser zu meinem sonstigen Umfeld.

W.S.
Gast #4787096
Lesenswert?

Jörg W. schrieb:
> #define U8 uint8_t
> #define U16 uint16_t
> #define U32 uint32_t

wenn schon, dann doch bitte mit typedef:
1
typedef uint8_t U8;
2
typedef uint16_t U16;
3
typedef uint32_t U32;

Sonst bekommt man früher oder später Probleme...

W.S. schrieb:
> Ich halte das für ein vorgezogenes Freitagsthema und benutze ungeniert
> byte, word und dword. Paßt viel besser zu meinem sonstigen Umfeld.
Ich dachte dein Umfeld ist Lern-Betty und ARM. Da heißen die Dinger 
Byte, Half-Word (16bit), Word (32bit)... Da sind uint16_t und uint32_t 
doch etwas weniger missverständlich...
Gast #4787148
Lesenswert?

A. K. schrieb:
> Diese Variante ist bei vielen 32-Bit Plattformen etwas irreführend

Nö.

Ich benutze eben diese Terminologie (byte, word, dword) durchgehend über 
alle Architekturen und alle Programmiersprachen. Hat sich glänzend 
bewährt.

Da ist nix irreführend.

Eher schon die alberne Unterscheidung word und halfword. Zuerst war mir 
das vor Jahren bei Fujitsu FR aufgefallen, aber ARM macht den gleichen 
Unsinn. Das muß man glücklicherweise aber nur bei Assembler-Quellen 
beachten (so ähnlich klingendes wie MOVB, MOVH, MOVW).


Dr. Sommer schrieb:
> Sonst bekommt man früher oder später Probleme...

Ach wo.
Probleme bekommen nur Leute, die ohnehin nicht wissen, was sie tun.

Die benutzen dann eifrigst alles, was man ihnen vorsetzt - und sie 
glauben dann, daß sie ja eben deshalb garnix falsch gemacht haben 
könnten.
Von wegen.. gestern U32 und heute uint32_t, morgen ne andere Sau durch's 
Dorf, immer feste was neues. Dabei wird alles schlußendlich auf den 
altbekannten Urschleim unsigned long int heruntergebrochen. Klasse! 
Schöne neue Welt.

W.S.
Moderator Persönliche Seite #4787154
Lesenswert?

W.S. schrieb:

> und du meinst, uint8_t ist lesbarer als U8 ?

Hat das irgendwer irgendwo behauptet?

Es ist aber standardisiert.

> Abgesehen davon ist das auch bloß ein unsigned char und sonst nix.

Nur dann, wenn _CHAR_BIT_ == 8 ist.

Wenn es ungleich 8 ist, dann gibt es nämlich schlicht und ergreifend
gar kein uint8_t.  Wenn sich jemand U8 selbst als "unsigned char"
definiert und dann versucht wird, den Code auf eine Plattform zu
portieren, die keine 8-Bit-Einheiten kennt (zugegeben, die sind
selten, aber es gibt sie), dann macht das Zeug irgendwas, während
es bei Benutzung von uint8_t einen Compilerfehler gibt.

> Ich halte das für ein vorgezogenes Freitagsthema und benutze ungeniert
> byte, word und dword.

Für mich wäre "word" ein 32-bit-Typ, "dword" 64 bit, "hword" 16 bit.

So können sich die Ansichten bei solcherart gut standardisierten
Begriffen unterscheiden. ;-)
#4787200
Lesenswert?

W.S. schrieb:
> das vor Jahren bei Fujitsu FR aufgefallen, aber ARM macht den gleichen
> Unsinn.

Auch wenn es für viele heute so scheinen mag - die Computertechnik fing 
nicht erst bei Intel an. Der Begriff "Wort" stand von Anfang an für die 
native Breite zumindest der ursprünglichen Architektur einer 
Architekturfamilie.

Das war auch bei Intel 8086 so. Nur fing 8086 bei 16 Bits an, mit 
word=16b. Andere, wie ARM oder Power(PC), fingen mit 32 Bits an, mit 
word=32b. Oder hatten (Ganz)Worte mit 48, Halbworte mit 24 und 
Drittelworte mit 16 Bits. Und bei 36-Bit Maschinen hatte man eher 9-Bit 
als 8-Bit Bytes (oder 6-Bit Zeichen).

Dass die 68000 mit 16-Bit Worten operierte lag daran, dass man sich bei 
dieser Architektur nicht recht entscheiden konnte, ob das eine 16-Bit 
Architektur mit umfangreichen 32-Bit Möglichkeiten war, oder nicht doch 
schon eine 32-Bit Architektur.

Begriffe wie "Byte" und "Wort" stehen also historisch belegt nicht für 
bestimmte Bitbreiten, sondern beziehen sich auf die jeweilige 
Architektur. Die wohl erste Universalarchitektur war IBMs 360, die 8-Bit 
Bytes adressierte und mit 32-Bit Worten und 16-Bit Halbworten arbeitete.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren