C 输入unsigned long long int对于1-10^9范围足够吗?
收货人:每个整数都在1-109的范围内 我使用类型为C 输入unsigned long long int对于1-10^9范围足够吗?,c,types,C,Types,收货人:每个整数都在1-109的范围内 我使用类型为无符号long-long-int 对于所述的范围来说,它足够了吗?是的(假设您采用符号10^9表示1e9-^是C中的异或运算符,10^9是3) 无符号long-long必须能够存储0到264-1之间的数字。你的最大值比这个小得多 还请注意,无符号long必须能够存储0到232-1之间的数字。您的最大值也小于此值。长无符号整数类型。至少包含[0,+18446744073709551615]范围; 自本标准的C99版本起指定 来源:答案是肯定的,但
无符号long-long-int
对于所述的范围来说,它足够了吗?是的(假设您采用符号10^9
表示1e9
-^
是C中的异或运算符,10^9
是3
)
无符号long-long
必须能够存储0到264-1之间的数字。你的最大值比这个小得多
还请注意,
无符号long
必须能够存储0到232-1之间的数字。您的最大值也小于此值。长无符号整数类型。至少包含[0,+18446744073709551615]范围;
自本标准的C99版本起指定
来源:答案是肯定的,但您不需要
无符号长
,无符号长
就足够了
32位数字可以表示超过4*10^9。最多429497296。10^9远小于2^32 因此,在您的情况下,不需要使用
unsigned long-long
(它适合,是的),这是一种过度使用,可能会导致较慢的操作
使用适当的类型,在stdint.h
中规范化,包括:uint32\u t
或uint32\u t
()
long
也有保证,因此它也是一个好的简单选择。它依赖于平台。使用stdint.h
和uint64_t
(注意uint32_t
对于这样的范围就足够了)1e10在32位范围之外,是的。@Jean-Françoisfare:但你在这里当然是正确的。我将停止浏览您的评论;-)不,不要使用uint64\u t
,除非您需要64位且不超过64位的类型uint\u t至少64\u t
更具可移植性(至少在理论上是这样)。什么是“每个整数”?程序将读取并存储在对象中的每个整数?或者您的程序会对这些值进行各种运算,这样,尽管输入值被限制为10^9,但需要更多的位来适应将在这些值上执行的运算?正如页面所述:这适用于C99。在此之前,规则是16位的,我不确定,但如果我错了,请纠正我。在C99之前的版本中,类型long
确实存在吗?或者它只是一个gcc
扩展?不过,10^10比2^32多。对于可移植代码,更喜欢uint\u至少32\u t
(或者uint\u fast32\u t
)。它在包括glibc/x86_64在内的许多实际实现中定义错误,既浪费内存又影响性能。使用uint\u至少32\u t
或只使用unsigned long
甚至long
。没错,long
很简单,至少32位。为什么还要麻烦使用规范化类型呢?即使是带符号的long
也能够在1e9
上存储一个数字。