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

OP #2311533
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.
Moderator Persönliche Seite #2311570
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().

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