mikrocontroller.net

Forum: Compiler & IDEs Signed integer right shift (C++)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wilhelm M. (wimalopaan)


Bewertung
1 lesenswert
nicht lesenswert
Ab C++20 ist Op->> für signed-integer und positives Shift N als 
arithmetic right shift definiert, also eine vorzeichenerhaltende 
Division durch 2^N.

Dazu gibt es aber keinen feature-test, was nichts macht, denn den kann 
man sich ja auch selbst schreiben.

Meine Frage: welche Compiler/Target-Kombination macht denn überhaupt im 
Modus prior C++20 ein logic-rigth-shift in diesem Fall?

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Meine Frage: welche Compiler/Target-Kombination macht denn überhaupt im
> Modus prior C++20 ein logic-rigth-shift in diesem Fall?

Ich wüsste keine. Vermutlich gibt's auch keine. Bisher ist in C++ das 
Verhalten für negative Werte implementation-defined. Wenn's aber eh alle 
gleich machen, kann man das in C++ auch offiziell so definieren.

: Bearbeitet durch User
von mh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Meine Frage: welche Compiler/Target-Kombination macht denn überhaupt im
> Modus prior C++20 ein logic-rigth-shift in diesem Fall?

Vermutlich gibt es keine relevante Kombination. Wenn es eine geben 
würde, würden sie es vermutlich nicht definieren.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Meine Frage: welche Compiler/Target-Kombination macht denn überhaupt im
> Modus prior C++20 ein logic-rigth-shift in diesem Fall?

Was C++ betrifft, bigt es m.W. keine.

Es gab und gibt aber C-Compiler mit dieser Eigenschaft, von denen
(vermutlich genau) einer noch aktiv ist, nämlich der USC-C-Compiler für
das Betriebssystem OS 2200.

  https://en.wikipedia.org/wiki/OS_2200

Aus dem Compiler-Handbuch:
The right shift is logical (that is, zero-filled on the left) even if
the E1 expression is a signed integer type. However, you can get
algebraic right shifts on signed integral types by use of the
algebraic_shifts pragma:

#pragma algebraic_shifts

Aber auch in der nächsten C-Version soll der >>-Operator für alle
Compiler einheitlich arithmetisch schieben.

Mich persönlich tangiert diese Änderung des Standards wenig, da ich kaum
Anwendungen dafür sehe. Viel wichtiger ist für mich die Festlegung des
Zweierkomplements als Repräsentation für signed Integers und die damit
verbundene Konvertierungsmöglichkeit von unsigned nach signed.

von Nils (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Meine Frage: welche Compiler/Target-Kombination macht denn überhaupt im
> Modus prior C++20 ein logic-rigth-shift in diesem Fall?

Der Metrowerks Compiler für die SH4 Architektur hat das sehr zu meiner 
Verärgerung gemacht.

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.