www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Bitshift über 15 Bit


Autor: J. T. (smarty)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: J. T. (smarty)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.