Hallo! Ist eigentlich irgendwo spezifiziert, dass der << (bzw. >>) Operator in C immer 0-Bits von rechts (bzw. links) nachschiebt? Oder ist das nur Zufall? Viele Grüße, Klaus
Da der >>-Operator das nicht unter allen Bedingungen macht, ist die Frage irgendwie witzlos. Die Details finden sich in den C-Standards.
>>Da der >>-Operator das nicht unter allen Bedingungen macht, >Und warum nicht? Bei negativen Integerwerten können Einser nachgezogen werden...
Peter wrote: >>>Da der >>-Operator das nicht unter allen Bedingungen macht, > >>Und warum nicht? > > Bei negativen Integerwerten können Einser nachgezogen werden... Vermutlich kann das aber nur passieren wenn es ein signed integer ist, oder? Bei sowas wie uint8_t eher nicht, oder?
Klaus W. wrote: >> Bei negativen Integerwerten können Einser nachgezogen werden... > ^^^^^^^^^ > Vermutlich kann das aber nur passieren wenn es ein signed integer ist, > oder? > > Bei sowas wie uint8_t eher nicht, oder? Schon mal gesehen, dass ein uint8_t negativ wird?
> > Bei negativen Integerwerten können Einser nachgezogen werden... > > Vermutlich kann das aber nur passieren wenn es ein signed integer ist, > oder? Nur signed integer/long/short/char kann negative Integerwerte darstellen, daher ist Deine Frage etwas merkwürdig.
> Nur signed integer/long/short/char kann negative Integerwerte > darstellen, daher ist Deine Frage etwas merkwürdig. Stimmt.
Klaus W. wrote: > Ist eigentlich irgendwo spezifiziert, dass der << (bzw. >>) Operator in > C immer 0-Bits von rechts (bzw. links) nachschiebt? Oder ist das nur > Zufall? "Spezifiziert" wird etwas nur in einem Standard. Für C gibt es da mehrere. Deshalb ist deine Frage ein wenig wage. Mein Buch über ANSI-C von 1990 sagt folgendes dazu: Der left-shift << füllt immer mit Nullen auf. Der right-shift >> füllt immer mit Nullen auf, wenn es sich um einen unsigned-Typ handelt. Das Verhalten bei signed-Typen ist "implementationsspezifisch". Da sollte man wohl lieber eine Division durch eine Zweierpotenz nehmen, wenn es portabel sein soll, und darauf vertrauen, dass der Compiler das optimal umsetzt.
Detlev T. wrote: > Der left-shift << füllt immer mit Nullen auf. Der right-shift >> füllt > immer mit Nullen auf, wenn es sich um einen unsigned-Typ handelt. Das > Verhalten bei signed-Typen ist "implementationsspezifisch". Da sollte > man wohl lieber eine Division durch eine Zweierpotenz nehmen, wenn es > portabel sein soll, und darauf vertrauen, dass der Compiler das optimal > umsetzt. Ah, ok, vielen Dank!
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.