Forum: Compiler & IDEs Nachschlag: atmega8, WinAVR, AVR-Studio + itoa = Müll?!


von Ralf G. (ralg)


Lesenswert?

Da muss ich noch mal nachlegen, da ich von Jörg zitiert wurde.
Beitrag "Re: atmega8, WinAVR, AVR-Studio + itoa = Müll?!"

Patrick sein Code:
1
for(i = 10; i > 0; i--)
2
 if((a = (number / base^i)) > 0)
3
 {
4
  *buffer++ = a + '0';
5
  number -= (a * base^i);
6
 }
'base^i' ist 'base XOR i' (klar!), außer man hat eine andere 
Programmiersprache (BASIC)... dann heißt es 'base hoch i'. Und dann 
würde die Konstruktion stimmen, auch ohne Klammern.

von Matthias K. (mkeller)


Lesenswert?

Und was sagt uns das? Es ist eben C und kein Basic. Wozu dieser Thread?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ralf G. schrieb:
> 'base^i' ist 'base XOR i'

Aber "number / base^i" ist "(number / base) ^ i", also number geteilt
durch base, und das Ergebnis dann XOR i.  Es hilft auch rein überhaupt
nicht, wenn man dabei die Leerzeichen um das ^ weglässt und bei /
welche schreibt. ;-)

Aber vermutlich wollte der Autor stattdessen eher die pow()-Funktion
benutzen, oder vielleicht doch eher nicht, denn die arbeitet ja nur
mit double-Zahlen. :)

Effektiver ist es nach wie vor, die Funktion div() so lange
wiederholt aufzurufen (mit einem Divisor von 10), bis der Quotient
0 ist, dabei den erhaltenen Rest in einen String zu schreiben.  Die
Reihenfolge der Zeichen im String tauscht man anschließend, und
fertig ist die Zahl.  Genau so arbeitet letztlich auch die
Bibliotheksfunktion itoa().

von Ralf G. (ralg)


Lesenswert?

Jörg Wunsch schrieb:
> Aber vermutlich wollte der Autor stattdessen eher die pow()-Funktion
> benutzen

Genau sowas meinte ich. Ich dachte, vielleicht kommt er ja noch drauf, 
dass es 'hoch' in C nicht gibt und '^' ein XOR ist.

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.