为什么会导致溢出?

时间:2011-07-05 23:01:20

标签: c overflow stdint

我的理解是,由C99(stdint.h)定义的uint64_t被定义为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 个答案:

答案 0 :(得分:4)

您需要使用"%" PRIu64转化进行打印。不要忘记添加正确的包含!

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