www.mikrocontroller.net

Forum: PC-Programmierung unsigned Hex in C


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es steht für unsigned.

Nicht für "unsigned hex", nicht für "unsigned decimal" und auch nicht 
für "unsigned bockwurst".

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Einen 16 Bit int um 18 Stellen nach links geschoben ergibt immer 0

Es ergibt eigentlich sogar undefiniertes Verhalten.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es ergibt eigentlich sogar undefiniertes Verhalten.

?? Das erklär mir mal bitte

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dinge auf Bitebene, wie zb schieben, sind nur für unsigned Datentypen 
sauber definiert (ich denke mal das ist es worauf Rolf hinauswollte)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.