Forum: Digitale Signalverarbeitung / DSP / Machine Learning Bitshift über 15 Bit


von J. T. (smarty)


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!

von Kai G. (runtimeterror)


Lesenswert?

Zur Not zwei aufeinander folgende Shifts... kenne jetzt deine Plattform 
nicht.

(y << 25) == ((y << 15) << 10)

hässlich, aber sollte gehen und sich effizient kompilieren lassen.

Gruß

Kai

von Karl (Gast)


Lesenswert?

Was genau heißt
>funktioniert jedoch nur bis 15
?
Was genau funktioniert denn nicht?

von yalu (Gast)


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

von J. T. (smarty)


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?

von Kai G. (runtimeterror)


Lesenswert?

Du kannst deine eigenen Beiträge durch Klick auf "Löschen" löschen ;)

Ich würde den Artikel hier aber auf jeden Fall drin lassen - können 
andere nur draus lernen.

von Detlef _. (detlef_a)


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?

Cheers
Detlef

von yalu (Gast)


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.

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