Hi, steht 0x*U für unsigned hex? hex wird standard als 0x* dargestellt und wenn am Ende noch eine "U" steht, bedeutet es dass es sich um unsigned hex handelt oder hat es eine andere Bedeutung?? mfg Jan
Es gibt keinen Hex-Datentyp in C. Es gibt int in verschiedenen Längen, signed und unsigned. Für jeden kannst du Literale angeben. Das ist unabhängig davon, ob du für den Wert des Literals die Dezimal- oder Hexadezimalschreibweise wählst. 0x0fU ist also dasselbe wie 15U.
ja das ist ja klar. Es geht hier nicht um Datentyp, sondern um die Schreibweise. wofür stehr das "u" am Ende von 0x0fU? Stehr es für unsigned hex?
Es steht für unsigned. Nicht für "unsigned hex", nicht für "unsigned decimal" und auch nicht für "unsigned bockwurst".
ok aber wenn es 0x*u ist dann steht es für unsigned Hex, weil 0x* Hex und +u -> unsigned Hex :-) und vielen dank für die Hilfe
Hallo Jan Sämtliche Daten werden binär abgelegt. Hexadezimal ist nur eine abgekürzte Schreibweise davon. Wenn du irgnedwo in deinem Code einen konstanten Wert angibst, ist das eigentlich egal, ob du das in bin, hex oder dec machst. Es kommt nur darauf an, wie das Bitmuster von deinem Code interpretiert wird. Was es mit dem U auf sich hat, kann man wahrschinlich im Code sehen. Also solltest du ihn mal posten. Gruss Olli
Hallo Jan, vielleicht ist das mit dem signed / unsigned einfach nicht so klar: die Frage ob eine Variable signed oder unsigned deklariert ist, ändert nichts an der Binären Darstellung sondern am Wertebereich, eine Frage wie ich eine folge von Bits "interpretiere". Ein Beispiel: Ein Byte: bei der unsigned variante reicht der Wertebereich von 0 bis 255 (0000.0000 bis 1111.1111), bei der signed Variante wird das höchstwertige bit als "Vorzeichen" gedeutet. Wir haben einen Wertebereich von -128 bis + 127 (1000.0000 bis 0111.1111). Eine Zuweisung unsigned char x = 0xffU ist eigentlich unsinnig. Ob 0xff als -1 oder 255 verwendet wird hängt von der Definition der Zielvariablen aber nicht vom U hinter der Hexdarstellung ab. Bestenfalls wird der Compiler meckern, wenn du ein 0xffU auf ein signed char zuweist. Gruß Sebastian
Was bedeutet eigentlich das hier: (Uint32)(0x1ul<<x) Das Typecasting zu einem Unsigned Int mit 32-Bit-Länge versteh ich noch (Uint32 wurde vorher definiert). Ich nehme an das "<<x" ist ein links-shift um x stellen. Das "u" würde ich als unsigned interpretieren, aber warum steht da "ul"? Anmerkung: das "l" in "ul" ist übrigens ein kleines L, also keine Zahl Eins. Lässt sich hier in der Schrift nicht erkennen.
Michael schrieb: > Was bedeutet eigentlich das hier: > > (Uint32)(0x1ul<<x) > > Das Typecasting zu einem Unsigned Int mit 32-Bit-Länge versteh ich noch > (Uint32 wurde vorher definiert). Ich nehme an das "<<x" ist ein > links-shift um x stellen. Das "u" würde ich als unsigned interpretieren, > aber warum steht da "ul"? das l steht für long. Das soll wohl verhindern, dass der Shift nur mit einem int gemacht wird, was ein Problem wäre, wenn ein int auf dem System nur 16 Bit hat. Einen 16 Bit int um 18 Stellen nach links geschoben ergibt immer 0
> Einen 16 Bit int um 18 Stellen nach links geschoben ergibt immer 0
Es ergibt eigentlich sogar undefiniertes Verhalten.
>Es ergibt eigentlich sogar undefiniertes Verhalten.
?? Das erklär mir mal bitte
Dinge auf Bitebene, wie zb schieben, sind nur für unsigned Datentypen sauber definiert (ich denke mal das ist es worauf Rolf hinauswollte)
Nein, das war es nicht. Mir ging es darum: (Zitat aus der ISO-Norm) "If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined." Mit anderen Worten: Wenn man um die Größe des Typs oder mehr shiftet, ist das Verhalten undefiniert, und das ist bei "Einen 16 Bit int um 18 Stellen nach links geschoben" der Fall.
Rolf Magnus schrieb: > Nein, das war es nicht. Mir ging es darum: (Zitat aus der ISO-Norm) > > "If the value of the right operand is negative or is greater than or > equal to the width of the promoted left operand, the behavior is > undefined." Ah. Den kannte ich noch gar nicht :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.