mikrocontroller.net

Forum: Compiler & IDEs Bit Shift in C


Autor: Klaus W. (Firma: privat) (texmex)
Datum:

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

Autor: Norgan (Gast)
Datum:

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

Autor: Das Kleinkind (Gast)
Datum:

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

Und warum nicht?

Autor: Peter (Gast)
Datum:

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

>Und warum nicht?

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

Autor: Klaus W. (Firma: privat) (texmex)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

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

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

Autor: Klaus W. (Firma: privat) (texmex)
Datum:

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

Stimmt.

Autor: Detlev T. (detlevt)
Datum:

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

Autor: Klaus W. (Firma: privat) (texmex)
Datum:

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

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.