C 输入unsigned long long int对于1-10^9范围足够吗?

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版本起指定 来源:答案是肯定的,但

收货人:每个整数都在1-109的范围内

我使用类型为
无符号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
上存储一个数字。