Hallo, ich hab hier einen Programmausschnitt, indem ein analoges Signal eingelesen wird und in ein digitales umgewandelt wird: unsigned int val; val = holeWert(); iprintf ("AIN%i: Digital Value %4u = %01u.%04u Volts\n", chan, (unsigned) val, (unsigned) (val * VREF) >> 10, /* Output Integer Portion */ (unsigned) ((val VREF 10000UL) >> 10UL) % 10000); /* Output Decimal Portion */ val -> ist der Wert den ich mir am analogen Eingang hole. VREF -> ist mit 33/10 definiert Das Programm funktioniert soweit und es handelt sich um ein Beispiel von WinARM. Ich würde aber gerne wissen was bei iprintf an der Stelle: (unsigned) (val * VREF) >> 10, (unsigned) ((val VREF 10000UL) >> 10UL) % 10000); gemacht wird. Er nimmt den val-Wert mit VREF mal und beim zweiten auch noch mit 10000ul. Aber was bedeutet >>10 ? %10000 dies ist doch eine Modulo Berechnung oder? Als Ausgabe bekomme ich: AIN515: Digital Value 515 = 1.6591 Volts AIN513: Digital Value 513 = 1.6523 Volts AIN520: Digital Value 520 = 1.6757 Volts AIN518: Digital Value 518 = 1.6689 Volts AIN515: Digital Value 515 = 1.6591 Volts Nur wenn ich 515*33/10 berechne komme ich auf 1699,5. Nimmt er da nur die erste Stelle? Also die 1? Aber was geschieht bei der zweiten Rechnung genau? Danke, Birger
> Aber was bedeutet >>10 10 bits nach rechts schieben. Ist gleichbedeutend mit einer Division durch 1024, da 1024 ja ( 2 hoch 10 ) ist. > Aber was geschieht bei der zweiten Rechnung genau? Ich denke, dass muesstest Du jetzt schon alleine hinkriegen. & ist modulo weiterer Hinweis: 3456 / 1000 -> 3 3456 % 1000 -> 456 mittels / und % kann man also wunderbar eine Zahl in Komponenten splitten: 3456 = 3 tausend und 456
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.