哪种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位整数。