Почему это вызывает переполнение? - PullRequest
0 голосов
/ 06 июля 2011

Насколько я понимаю, uint64_t, определенный C99 (stdint.h), определен длиной 8 байт (= 64 бита), что позволяет максимально использовать значение 2 ^ 64 - 1. Однако, когда я пытаюсь выполнить следующее фрагмент кода, uint64_t переполняется, даже если он далеко не 2 ^ 64 - 1:

uint64_t Power10(int exponent)
{
    int i = 1;
    uint64_t ret = 10;
    while(i < exponent)
    {
        ret *= 10;
        ++i;
    }

    return ret;
}

Помощь будет очень цениться.

1 Ответ

4 голосов
/ 06 июля 2011

Вам нужно распечатать с "%" PRIu64 преобразованием.Не забудьте добавить правильное включение!

#include <inttypes.h>
int main(void) {
    printf("Power10(12) is %" PRIu64 "\n", Power10(12));
    return 0;
}
...