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
Gast
#1036965
Da der >>-Operator das nicht unter allen Bedingungen macht, ist die Frage irgendwie witzlos. Die Details finden sich in den C-Standards.
Gast
#1036981
>Da der >>-Operator das nicht unter allen Bedingungen macht,
Und warum nicht?
Gast
#1036983
>>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!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.