Gibt es eine Lösung uint32_t Helga; Helga = (1<<17); // das geht so oder auch so nicht !!!!! da ich aber 28 Flags abfragen möchte, könnte ich dieses Schieben über 32 Stellen gut gebrauchen -- kann jemand helfen???? Danke
Danke - wunderbar - ich bin begeistert ... Wo bekommt man denn diese Infos her? Gibt es da irgendeine Übersicht, wo das alles mal beschrieben ist? Im Tutorial hier habe ich da nichts gefunden. Danke ....
Stichwort für die weitere Recherche: integer promotion
Das sollte in jedem C-Lehrbuch drin stehen. Eine Operation wird, unabhängig vom Typ der Ergebnisvariablem, immer in dem Wertebereich oder der Genauigkeit des "größten" Datentyps der Operanden ausgeführt, also z. B. int op int -> int long op int -> long int op long -> long int op float -> float float op double -> double usw. Wenn die Schiebeoperation also in 32 Bit (long) ausgeführt werden soll, muss man dafür sorgen, dass mindesetens einer der Operanden long ist. Dies erreicht man durch eine Typecast (Voranstellen von "(long)") oder - bei Konstanten wie in diesem Beispiel - durch Anhängen eines "L".
>da ich aber 28 Flags abfragen möchte, könnte ich dieses Schieben über 32 >Stellen gut gebrauchen -- Ist es hier vielleicht nicht besser die Flags zuunterteilen wie beim AVR und diese in ein Struct zupacken?
Ja, habe ich auch immer so gemacht, nur will ich diesmal an einer Stelle wissen, ob das gesamte Register (Variable) Null bzw. einen anderen Wert hat. Das habe ich mit struct nicht hinbekommen ..... also z.B. Control.Flag_1 = 1; Control.Flag_2 = 0; ... usw. ... if (Control==0) ..... klappt irgendwie nicht (logisch oder?) Außerdem müsste ich trotzdem 28 Stellen schieben können, da ich die Flags über eine For-Schleife (i=0;i>28;i++) abfrage. Wie soll ich dass mit Strucs machen?
Mit einer Union, die parallel zur Struct noch einen uint32_t beinhaltet. Dann klappts auch mit: if (Control.all == 0)
Mit data overlays, wie solchen unions, sollte man ausgesprochen sparsam umgehen. Das ist nicht nur schlechter und eher schlecht lesbarer Stil, es gibt dabei auch einige Falltüren.
PS: Unions wurden erdacht, um den gleichen Platz für verschiedene Dinge nutzen zu können. Nicht im den Compiler hinterrücks zu verarschen - denn nichts anderes ist die Typkonvertierung per union.
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.