Signed integer right shift (C++)

OP #6119574
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?
#6119690
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.
Gast #6119708
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.
Moderator #6119733
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:
1
The right shift is logical (that is, zero-filled on the left) even if
2
the E1 expression is a signed integer type. However, you can get
3
algebraic right shifts on signed integral types by use of the
4
algebraic_shifts pragma:
5

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.