Czytam K & R; do tej pory dobrze sobie z tym radzę, ale jest coś w funkcji itoa()
której nie rozumiem. Tutaj w itoa()
mówią, że same odwracają liczby. Na przykład 10 to 01 (odwracają ciąg znaków):Nie rozumiem itoa() w książce K & R
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
return;
}
Nie rozumiem, jak odwrócił tę liczbę. Mimo, że właśnie robimy n % 10 + '0'
, to jest to następna cyfra, którą 10 następnie 1 zostaje usunięta, a następnie przechodzi do 0 w prawo? Lub nie rozumiem jego logiki?
Używaj interpunkcji i unikaj kolejnych zdań. Bardzo trudno jest przeczytać twoje pytanie. –
Należy zauważyć, że ten kod nie konwertuje niezawodnie INT_MIN. –
@ Jonathan Co można polecić przenośnie dla INT_MIN? Dzięki! – sigjuice