Forum: Compiler & IDEs Bit Shift in C


von Klaus W. (Firma: privat) (texmex)


Lesenswert?

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

von Norgan (Gast)


Lesenswert?

Da der >>-Operator das nicht unter allen Bedingungen macht, ist die 
Frage irgendwie witzlos. Die Details finden sich in den C-Standards.

von Das Kleinkind (Gast)


Lesenswert?

>Da der >>-Operator das nicht unter allen Bedingungen macht,

Und warum nicht?

von Peter (Gast)


Lesenswert?

>>Da der >>-Operator das nicht unter allen Bedingungen macht,

>Und warum nicht?

Bei negativen Integerwerten können Einser nachgezogen werden...

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

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?

von Johannes M. (johnny-m)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> > 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.

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

> Nur signed integer/long/short/char kann negative Integerwerte
> darstellen, daher ist Deine Frage etwas merkwürdig.

Stimmt.

von Detlev T. (detlevt)


Lesenswert?

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.

von Klaus W. (Firma: privat) (texmex)


Lesenswert?

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
Noch kein Account? Hier anmelden.