Forum: Mikrocontroller und Digitale Elektronik Gcc + AVR -> Schnelleres Teilen mit z.B. 32/64 als mit 33/65 ?


von Jens M. (Gast)


Lesenswert?

Hallo,

bei machen Code-Beispielen für den AVR sehe ich das mache versuchen
immter durch 2er Potenzen zu teilen (falls möglich).

Bsp.
1
 int a;
2
 //....
3
 a /= 32; // Verkleinern

und nicht 'gerade' Werte
1
 int a;
2
 //....
3
 a /= 30; // Verkleinern

Ist die Division mit 2er Potenzen allgemein schneller,
irgendwie anders vorteilhafter?

Danke
Jens

von Karl H. (kbuchegg)


Lesenswert?

Jens M. schrieb:

> Ist die Division mit 2er Potenzen allgemein schneller,
> irgendwie anders vorteilhafter?

Du bist das 10-er System gewohnt.
Dein Rechner arbeitet aber im 2-er System

So wie du einfach durch 10 dividieren kannst, indem du einfach die 
letzte Stelle unter den Tisch fallen lässt und alles andere eine Stelle 
nach rechts rückst, so kann ein Rechner einfach durch 2 dividieren, 
indem er die letzte Stelle unter den Tisch fallen lässt und alles andere 
eine Stelle nach rechts rückt.

Was für dich im 10er System die Reihe 10, 100, 1000, 10000, ... ist
(durch die man alle einfach dividieren kann), ist für einen Computer die 
Reihe 1, 2, 4, 8, 16, 32, 64, ...

von Vlad T. (vlad_tepesch)


Lesenswert?

für dich ist "durch 10 teilen" doch auch um einiges einfacher als durch 
11, 7.

im Basis-10 Zahlensystem ist das teilen durch 10er-Potenzen sehr 
einfach, da man nur das komma verschieben muss.

genauso ist es für CPUs mit ihrem Basis-2 Zahlensystem.

von Albert .. (albert-k)


Lesenswert?

Wenn man durch 2er Potenzen teilt kann der Controller dies durch 
einfaches Bit-shiften erledigen. Bei den anderen Sachen muss dies durch 
einen Software Algorithmus gelöst werden wenn nicht gerade eine Hardware 
Divisions Einheit vorhanden ist.

von Jens M. (Gast)


Lesenswert?

super, ok, vielen Dank.

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.