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