Forum: Mikrocontroller und Digitale Elektronik Modulo mit Shift in C, wie?


von Giovanni (Gast)


Lesenswert?

Hallo,

ich möchte den Mod von einem Integer % 360 mit Shifts berechnen. Und 
zwar weiß ich nicht wie man sowas mit Shifts machen kann.

Der normale '%' Operator braucht zu lange bei den großen Zahlen.

Vielen Dank im Voraus.

Giovanni

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Welche CPU, wieviel Bit ist der Integer? Was fuer weitere Rosinen 
stecken in deiner Nase, die man einzeln rausziehen muss?

Gruss
WK

von Giovanni (Gast)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Welche CPU, wieviel Bit ist der Integer? Was fuer weitere Rosinen
> stecken in deiner Nase, die man einzeln rausziehen muss?
>
> Gruss
> WK

Für einen STM32, int 4Bit.

von Mark B. (markbrandis)


Lesenswert?

Giovanni schrieb:
> Für einen STM32, int 4Bit.

Du meinst wohl 4 Byte. Oder auf gut deutsch 32 Bit.

von Giovanni (Gast)


Lesenswert?

Mark B. schrieb:
> Giovanni schrieb:
>> Für einen STM32, int 4Bit.
>
> Du meinst wohl 4 Byte. Oder auf gut deutsch 32 Bit.

Naturlich :D

von Tippgeber (Gast)


Lesenswert?

Giovanni schrieb:
> Der normale '%' Operator braucht zu lange bei den großen Zahlen.

Wofür braucht der für 32 bit auf einem STM32 in C zu lange?

Beitrag #5021517 wurde von einem Moderator gelöscht.
von Thomas E. (picalic)


Lesenswert?

Giovanni schrieb:
> ich möchte den Mod von einem Integer % 360

360 ist ne blöde Zahl dafür - Teile den Kreis lieber in 512 Einheiten 
statt Grad zu benutzen, dann geht es mit einem simplen & 0x1FF.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

OK, bei einem AVR haett's mich nicht gewundert; aber beim STM32 kann ich 
fast nicht glauben, dass es daran liegt. iirc kann der doch Division in 
Hardware; da waer's sehr verwunderlich, wenn das laenger dauern sollte 
als eine handgebastelte shifterei.

Wie kommst du drauf, dass das lange dauert? Schon mal geguckt, was der 
Compiler draus fuer Code erzeugt?

Gruss
WK

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

4bit 0...15 Da ist ein MOD 360 einfach ;)

Wenn sich der Wert immer nur sporadisch erhöht und relativ langsam 
erhöht, kannst Du den Wert korrigieren, wenn Er über 360 angewachsen ist 
(Wert=Wert-360).
In die andere Richtung müsste man auf 'Negativ' prüfen (höchste Bit 
gesetzt) und dann eben Wert=Wert+360 machen, bis der Wert wieder 'im 
grünen Bereich' ist.

Dafür sollten dann 9bit reichen bzw, 10bit, um das 'Negatib-Bit' nicht 
irrtümlich zu setzen.

MfG

: Bearbeitet durch User
von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Giovanni schrieb:
> Der normale '%' Operator braucht zu lange bei den großen Zahlen.

Wie wurde das festgestellt?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jepp. So in etwa hatte ich mir das auch vorgestellt.

Da wird irgendwas anderes klemmen...

Gruss
WK

Beitrag #5021575 wurde von einem Moderator gelöscht.
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.