由于存在各种类型的64位数据模型(LLP64 / IL32P64,LP64 / I32LP64,ILP64,SILP64),指定64位无符号整数文字的标准符合方式是什么?
指定ULL的后缀是否足够?或者我最终会在某些数据模型上将文字解释为128位?
答案 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
。