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

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