Division durch 1024 signed

Gast #4215131
Lesenswert?
• ▲
▼
Hallo

Ich suche nach der Ressourcenschonendsten Methode eine Signed 32Bit 
Integer-Zahl durch 1024 zu teilen. Shiften geht im two's complement ja 
leider nur bri Positiven Zahlen.

Ich habe nen ARM M0 Prozessor mit Hardware-Multiplier und 
Barrel-Shifter.

im Moment mache ich ne Fallunterscheidung ob die Zahl >=0 ist. Wenn ja 
Wird geshiftet um 10 Bit, wenn nein wird erst mit -1 multipliziert, dann 
geshiftet und dann nochmals mit -1 multipliziert.

Gibts da noch ne bessere Variante?
#4215215
Lesenswert?
• ▲
▼
@ Chris (Gast)

>Ich suche nach der Ressourcenschonendsten Methode eine Signed 32Bit
>Integer-Zahl durch 1024 zu teilen. Shiften geht im two's complement ja
>leider nur bri Positiven Zahlen.

Nö, Das geht auch mit vorzeichenbehafteten Zahlen. Allerdings ist das 
glaub ich "implementation definied" oder so. Also muss man ggf. manuell 
nachhelfen.
1
int32_t x;
2

3
x >>= 10;
4
if (x & 0x00200000) x |= 0xFFC00000;   // sign extend
#4215218
Lesenswert?
• ▲
▼
Chris schrieb:
> Hallo
>
> Ich suche nach der Ressourcenschonendsten Methode eine Signed 32Bit
> Integer-Zahl durch 1024 zu teilen. Shiften geht im two's complement ja
> leider nur bri Positiven Zahlen.
>
> Ich habe nen ARM M0 Prozessor mit Hardware-Multiplier und
> Barrel-Shifter.
>
> im Moment mache ich ne Fallunterscheidung ob die Zahl >=0 ist. Wenn ja
> Wird geshiftet um 10 Bit, wenn nein wird erst mit -1 multipliziert, dann
> geshiftet und dann nochmals mit -1 multipliziert.
>
> Gibts da noch ne bessere Variante?

Wie so gut wie alle anderen Controller so kennt auch der Cortex-M0 
arithmetische und logische Schiebebefehle:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/BABJCCDH.html
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/CIHDDCIF.html

Antwort schreiben

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.

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.