Bitshift über 15 Bit

OP #753253
Hallo,

ich habe eine Frage zum Shifting von Bits. Ich arbeite mit Code Composer 
Studio 3.1 und programmiere einen TMS320F2812 in C++.
Da der DSP ja mit Bitshifts wesentlich schneller arbeitet als mit 
normaler Multiplikation/Division, möchte ich damit meine 
Zahlenbereichserweiterungen realisieren. Die Variablen sind vom Typ 
long.
Der Links-Shift (x = y << 15) funktioniert jedoch nur bis 15 während der 
Rechts-Shift bis 31 klappt (x = y >> 31). Gibt es einen Operator der den 
Links-Shift auch über 15 Bit shiften lässt, oder bleibt mir in diesem 
falle nur die einfache Multiplikation mit der gewünschten 2er Potenz?

Vielen Dank im vorraus!
Gast
In C/C++ gibt es keine Größenbeschränkung für den rechten Operanden
des <<- und des >>-Operators. Also:

- Bug im Compiler
- Bug im Prozessor
- Bug in der Art und Weise, wie du herausgefunden hast, dass es nicht
  geht
OP
Danke für die zügigen Antworten...

Mein Fehler, hab grad gesehen das die falsche Variable (die Namen waren 
sich sehr ähnlich) zum testen geschnappt habe...naja mit einer Variable 
vom Typ int kann sowas ja nicht funktionieren...Trotzdem vielen Dank!


By the way, wo kann man Beiträge wieder löschen?
Gast
> yalu wrote:
>> In C/C++ gibt es keine Größenbeschränkung für den rechten Operanden
>> des <<- und des >>-Operators. Also:
>
> Die müssen >= 0 sein, negativ geht de facto nicht, der spec nach ja?

Ich wollte jetzt gerade zumeiner Verteidigung schreiben: Mit "keine
Größenbeschränkung" meinte ich, dass der Wert beliebig groß (aber
nicht beliebig klein) werden darf ;-)

Aber selbst das wäre gelogen. In den 10 Geboten steht nämlich:

> If the value of the right operand is negative or is greater than or
> equal to the width of the promoted left operand, the behavior is
> undefined.

D.h. für ein 32-Bit-Integer ist nicht einmal ein Shift um 32 Bits
erlaubt. Ich nehme also den ersten Satz des oben Geschriebenen hiermit
komplett zurück.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.