Matthias Kugler schrieb:
> 2^14
0b00000010 EXOR 0b00001110 = 0b00001100 = 0x0C = 12
Das war bestimmt nicht gewollt, oder? exklusiv-oder?
Für "x hoch y" nimmt man die pow()-Funktion.
Dazu brauchst du die math.h; sobald du die aber einbindest und das hier
benutzt, wird in Fließkommazahlen gerechnet. Das frisst Flash und
Rechenzeit. Darum schau dich mal nach "Bitoperationen",
"Schiebeoperator" und "Festkommaarithmetik" um(bemüh die Forensuche).
Für Unsigned 16-Bit Zahlen kann man zum Umwandeln in ein String z.B.
folgendes hernehmen(auch wenn es nicht sonderlich effizient ist):
1 | uint16_t number = 12345;
|
2 | uint16_t buffer;
|
3 | uint8_t mystring[6];
|
4 |
|
5 | //Zehntausender
|
6 | buffer = number / 10000;
|
7 | mystring[0] = buffer + '0';
|
8 | number = number - (buffer * 10000);
|
9 | //Tausender
|
10 | buffer = number / 1000;
|
11 | mystring[1] = buffer + '0';
|
12 | number = number - (buffer * 1000);
|
13 | //Hunderter
|
14 | buffer = number / 100;
|
15 | mystring[2] = buffer + '0';
|
16 | number = number - (buffer * 100);
|
17 | //Zehner
|
18 | buffer = number / 10;
|
19 | mystring[3] = buffer + '0';
|
20 | number = number - (buffer * 10);
|
21 | //Einer... das mit dem Buffer und der 1
|
22 | //hier nur zur Einheitlichkeit des Codes
|
23 | buffer = number / 1;
|
24 | mystring[4] = buffer + '0';
|
25 | number = number - (buffer * 1);
|
26 | //String mit Stringende-Zeichen abschliessen
|
27 | mystring[5] = '\0';
|
28 |
|
29 | //Ausgeben
|
30 | lcd_clear();
|
31 | lcd_setcursor( 0, 1 );
|
32 | lcd_string(mystring);
|
Dein Part ist es jetzt, das Ganze in eine Funktion zu packen.
Irgendwo hier im Forum gab es auch schon mal eine ("selbstgeschriebene",
als Platzsparend bekannte)ItoA()-Funktion, die Signed 16-Bit Zahlen
verarbeitet(Auch mal suchen, bitte).
mfg mf
PS: Das C-Beispiel ist dazu gedacht, dass du dir ausdenkst, wo und wie
das Komma hier irgendwo rein kommen könnte. Und überleg dir, wie man
einen gegebenen Zahlenbereich mit maximaler Genauigkeit ausnutzt.