Wie wird der Modulooperator (%) tatsächlich berechnet?

8

Kürzlich war ich verwirrt über den Modulo-Operator % .

Es ist bekannt, dass a % b == a-a/b*b , wenn wir integers a und b wo a > b haben, und wir können diese Berechnung manuell durchführen, wenn a und b klein genug sind.

Wenn es jedoch darum geht, wie ein Prozessor es berechnet, verwendet der Prozessor die gleiche Methode wie zuvor erwähnt, a-a/b*b ? Vielleicht nur, indem man die Aufteilung in Subtraktion oder Addition umsetzt, oder ist da vielleicht etwas verschoben?

    
pNok 09.10.2011, 13:20
quelle

2 Antworten

8

Außer für Potenzen von 2, wo der Modulo-Operator (und in den meisten Optimierern von Compilern) in eine einfache bitweise Operation umgewandelt werden kann, fürchte ich, der einzige Weg, es zu tun, ist der harte Weg. Erklärung ist Ссылка

In einer anderen Antwort weist @Henk Holterman darauf hin, dass einige CPUs dies im Mikrocode tun und den Rest in einem Register lassen, während sie eine Ganzzahl teilen, was bedeutet, dass der Modulo-Befehl auf eine Ganzzahl geteilt werden kann und den Rest zurückgibt. (Ich füge diese Informationen hier hinzu, weil diese Antwort bereits akzeptiert wurde.)

    
Paul Tomblin 09.10.2011, 13:28
quelle
5

Es verwendet die idiv Assemblierungsanweisung:

%Vor%

idiv speichert den Rest in einem Register.
Ссылка

    
Steve Wellens 09.10.2011 13:48
quelle

Tags und Links