在64位数据模型上指定64位无符号整数文字

时间:2012-10-31 12:58:09

标签: c++ integer 64-bit

由于存在各种类型的64位数据模型(LLP64 / IL32P64,LP64 / I32LP64,ILP64,SILP64),指定64位无符号整数文字的标准符合方式是什么?

指定ULL的后缀是否足够?或者我最终会在某些数据模型上将文字解释为128位?

4 个答案:

答案 0 :(得分:38)

如果有,请使用<cstdint> / <stdint.h>。这会给你:

  • uint64_t是无符号整数类型,大小为64位
  • UINT64_C()是一个用于创建uint64_t类型常量的宏,方法是让宏附加正确的后缀。

答案 1 :(得分:1)

据我所知,没有办法将整数文字后缀为特定的位宽;你唯一的选择是l,ul,ll和ull。

如果你是偏执狂,你必须用#if检查long / long long的大小来包装你的文字。

然后,正如KennyTM上面指出的那样,只要您的文字 在64位范围内并且分配给64位值,那么如果文字本身是64位还是128位,还是它呢?

答案 2 :(得分:1)

C和C ++没有标准化的32/64/128位变量类型。例如,某些系统上的长度为32位,其他系统为64位。这很烦人,但大多数操作系统确实提供了一些更好的typedef来帮助你,比如uint32等,所以你可以选择一个你需要的确切类型。

这是一个好的configure脚本的工作:确定系统提供的内容,测试它是否有效,并帮助您为正在运行的正确架构选择正确的类型。

答案 3 :(得分:1)

在大多数情况下,没关系。如果不给它后缀,则整数文字的类型由其值确定。如果编译器具有32位unsigned long和64位unsigned long long,则无符号值太大而不能容纳unsigned long但对于{{1}而言不会太大将具有类型unsigned long long