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

Kob*_*obi 7 c binary

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

Tim*_*nes 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 long在特定机器上至少64位(第5.2.4.2.1),在类型<stdint.h>被设计成显式便携.

你可以阅读更多有关在不同平台上的整数大小这里.请注意,整数类型的大小是long数据类型的问题- 在64位Windows上,它当前是32位,而在64位linux上它是64位.出于这个原因,我相信你最安全的使用类型<stdint.h>

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


如果你的编译器只支持C89,那么R ..的解决方案将允许你最多53位的整数精度.

  • 我不同意.实际上,`long long`在理论上更*可移植,因为符合C99或C11的实现必须提供该类型,而`int64_t`不一定存在.只有当你需要一个没有填充的64位二进制补码类型时才应该使用`int64_t` - 在这种情况下,你需要"至少40位"然后"long long"是优选的,因为它不会增加不必要的限制. (2认同)