在32位系统的C中,哪种数据类型将存储(因此可以打印)最大的整数?是long long
还是unsigned long
?有unsigned long long
吗?哪个是最精确和政治正确的?
答案 0 :(得分:10)
您的问题有点不清楚,但intmax_t
是最大的有符号整数值类型(uintmax_t
是最大的无符号整数类型)。这些是<stdint.h>
中定义的typedef,但是如果要打印它们,则需要<inttypes.h>
,而PRInMAX宏需要 n 的各种值。
答案 1 :(得分:2)
在没有围绕丛林的情况下,我想说有时候不是在实际的编码练习中,在某些比赛中肯定是肯定的,人们可能需要非常大的数据类型,我认为我们可以做到这一点。为什么不采用字符串形式的整个序列,然后使用atoi函数来获取整数值,我认为politcally正确:: :)
#include<stdio.h>
#include<stdlib.h>
int main ()
{
int i;
char bigString [256];
printf ("Enter a number: ");
fgets (bigString, 256, stdin);
i = atoi (bigString);
printf ("The value entered is %d.",i);
return 0;
}
答案 2 :(得分:1)
在ISO C99中long long
至少是64位,这是最大的标准整数数据类型。它也是unsigned long long
。显然,您的编译器可能会提供由intmax_t
和uintmax_t
定义的更大类型。
但根据您的评论,您可能正在寻找像GMP这样的bigint库。它允许任意长整数(和浮点)仅受系统资源限制。
答案 3 :(得分:0)
具有最长打印字符串的数据类型是带符号数据类型,除非您的整数类型的最大无符号值比最大有符号值长一个数字。
例如,无符号的4位整数在签名时最多为两个无符号字符或一个字符加负号。
因此,您应该选择一个签名数据类型来表示最大的打印字符串。哪个应该是long long
。