显示非常大的数字

时间:2011-10-29 13:19:27

标签: c long-integer unsigned

我们知道4294967295是unsigned int中最大的数字,如果我将这个数字乘以它然后如何显示它?我试过了:

long unsigned int NUMBER = 4294967295 * 4294967295;

但仍然得到1作为答案。

4 个答案:

答案 0 :(得分:3)

你正在溢出。考虑十六进制的muplication:

0xffffffff * 0xffffffff == 0xfffffffe00000001
                                     ^^^^^^^^
                                     only the last 32 bits are returned

解决方案是使用更大的类型,例如long long unsigned

long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL;

后缀ULL表示unsigned long long

查看在线工作:ideone

答案 1 :(得分:1)

乘法溢出。

#include <stdio.h>
int main()
{
    unsigned int a = 4294967295;
    unsigned int b = 4294967295;

    // force to perform multiplication based on larger type than unsigned int
    unsigned long long NUMBER = (unsigned long long)a * b;
    printf("%llu\n", NUMBER);
}

答案 2 :(得分:0)

您在问题中指出,您知道max int等于4294967295.这意味着如果使用unsigned int,则无法存储大于该数字的数字。

C长在64位unix系统 [source] 上无符号存储时最多可存储18,446,744,073,709,551,615所以你只需要用UL后缀你的数字:4294967295UL

如果您没有使用64位unix系统,那么您应该使用long long unsigned int和后缀LL

答案 3 :(得分:-1)

是的,这是一个溢出。如果你正在使用c,那么没有任何简单的方法可以像我所知的那样大量繁殖。也许你需要自己写一个。事实上,一些语言最初支持这样的功能。