Bitshift über 15 Bit

#753253
Lesenswert?

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 #753282
Lesenswert?

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
#753292
Lesenswert?

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 #753501
Lesenswert?

> 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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren