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!
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
Was genau heißt
>funktioniert jedoch nur bis 15
?
Was genau funktioniert denn nicht?
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
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?
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.