Modulo Ergebniss

Gast #468234
Lesenswert?

Hallo, ich habe ein Problem mit einem Modulo vergleicher. Ich lese aus 
einem FAT Dateisystem Cluster informationen rein zB. (0x0003) mit diesem 
"vergleicher"

while(( Cluster_Location_Address % 512) != 0)
{
    Address_Overflow++;
    Cluster_Location_Address--;
}

Das geht gut und recht bis zu 0x0080, am Anfang multipliziere ich den 
Wert noch mals 2, also 0x0100...Dann gibt es Probleme.. Kann es sein 
das, das Modulo Ergebnis nur 8bit ist? Der höchste Wert den der Modulo 
"vergleicher" rechnen musst ist logischer weise 511 bzw. 510.. Wie kann 
ich dieses Problem umgehen? Es wäre sehr ärgerlich wenn modulo nur bis 
8bit geht...

Grüsse
#468250
Lesenswert?

Zu deinen Moduloproblem direkt kann ich dir nichts sagen, aber einen 
Tipp am Rande hab' ich: Modulo-Operationen mit Zweierpotenzen gehen sehr 
schön mit bitweisem "und":
x%(2^n)=x&(2^n-1)

x % 512 = x & 511

Beispiel:
7%4=3 bzw.:
7=111.b
4-1=3=11.b
7&3=111.b & 11.b=11.b=3

Bitweise Operationen sollte der Compiler ja mit mehr als 8 Bit machen 
können und diese Variante ist sogar noch einiges schneller (war 
zumindest bei mir auf nem XScale so: 
http://www.pocketmatrix.com/forums/viewtopic.php?t=15995&highlight= )

Beste Grüße,
Bartl

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