哪种C数据类型可以表示40位二进制数?

时间:2012-03-07 03:01:45

标签: c binary

我需要表示一个40位的二进制数。应该使用哪种C数据类型来处理这个?

4 个答案:

答案 0 :(得分:9)

如果您使用的是符合C99或C11标准的编译器,请使用int_least64_t以获得最大兼容性。或者,如果您想要无符号类型uint_least64_t。这些都在<stdint.h>

中定义

<stdint.h>通常也定义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 longat least 64 bits on a particular machine(第5.2.4.2.1节),但<stdint.h>中的类型设计为明确可移植。

您可以在不同平台here上阅读有关整数大小的更多信息。 请注意,整数类型的大小是long数据类型的问题 - 在64位Windows上,它当前是32位,而在64位linux上它是64位。因此,我相信您使用<stdint.h>

中的类型最安全

值得注意的是,有些人认为long long更具可读性。就个人而言,我更喜欢<stdint.h>中的类型,因为它们允许您在使用它们时说出您的意思 - 我发现它更具可读性。当然,可读性通常是一种品味问题 - 如果你正在使用现有的代码库,我只会遵循他们所做的一切:)


如果您的编译器仅支持C89,那么R..'s solution将允许最多53位的整数精度。

答案 1 :(得分:3)

long long是一个整数类型,至少 64位。它将在所有平台上符合带符号的40位值。您还可以将unsigned long long用于64位或更多的无符号值。

答案 2 :(得分:3)

答案 3 :(得分:1)

现有答案很好,但如果您也想要C89支持,double将能够在所有符合IEEE 754标准的实现上精确存储40位整数。