C中有大数字的问题

时间:2011-06-05 18:53:27

标签: c int

为什么这样的代码应该提供如此高的结果,当我给它编号4293974227(或更高)时

int main (int argc, char *argv[])
{


unsigned long long int i;

unsigned long long int z = atoi(argv[1]);

unsigned long long int tmp1 = z;


unsigned long long int *numbers = malloc (sizeof (unsigned long long int) * 1000);

for (i=0; tmp1<=tmp1+1000; i++, tmp1++) {

    numbers[i] = tmp1;
    printf("\n%llu - %llu", numbers[i], tmp1);
}

}

结果应该从提供的号码开始,但是这样开始:

18446744073708558547 - 18446744073708558547
18446744073708558548 - 18446744073708558548
18446744073708558549 - 18446744073708558549
18446744073708558550 - 18446744073708558550
18446744073708558551 - 18446744073708558551

... ECC

这是什么废话?

谢谢!

3 个答案:

答案 0 :(得分:6)

atoi()返回int。如果您需要更大的数字,请尝试strtol(), strtoll()或其亲属。

答案 1 :(得分:3)

atoi()返回(int),无法处理(long long)。尝试atoll(),或者失败atol()(前者是首选)。

答案 2 :(得分:0)

您正在将有符号整数打印为无符号。