哪种C数据类型可以表示40位二进制数?
我需要表示一个40位的二进制数。 应该使用哪种C数据类型来处理这个问题?
如果您使用的是符合C99或C11标准的编译器,则使用int_least64_t
以获得最大兼容性。 或者,如果你想要一个无符号类型, uint_least64_t
。 这些都在
定义
通常也定义了int64_t
,但由于标准不需要它,因此可能不会在每个实现中定义它。 然而:
-
int_least64_t
– 至少64位,和 -
int_fast64_t
– 此实现中至少64位的最快大小
C99和C11都要求它们存在(参见C99标准中的第7.18.1.2-3节和C11标准中的第7.20.1.2-3节)。
尽管C99指定特定计算机上的 long long
至少为64位 (第5.2.4.2.1节),但
中的类型设计为可显式移植。
您可以在此处阅读有关不同平台上的整数大小的更多信 请注意,整数类型的大小是long
数据类型的问题 – 在64位Windows上,它当前是32位,而在64位linux上它是64位。 出于这个原因,我相信你最安全地使用
的类型
值得注意的是,有些人觉得long long
更具可读性。 就个人而言,我更喜欢
的类型,因为它们允许您在使用它们时说出您的意思 – 我发现它更具可读性。 当然,可读性通常是一种品味问题 – 如果你正在使用现有的代码库,我只会按照他们所做的去做:)
如果你的编译器只支持C89,那么R ..的解决方案将允许你最多53位的整数精度。
long long
是一个至少为 64位的整数类型。 它将在所有平台上符合带符号的40位值。 您也可以使用unsigned long long
来表示64位或更多的无符号值。
您可以使用long long
,它可以包含64位或更多位。 有关更多信息,请参阅
http://en.cppreference.com/w/cpp/language/types
http://en.wikipedia.org/wiki/Integer_(computer_science)#Common_long_integer_sizes
在Linux中定义64位宽度整数
现有的答案很好,但如果你也想要C89支持, double
将能够在所有符合IEEE 754标准的实现上精确存储40位整数。