limits.h中值末尾的i64和i32是什么意思?

时间:2018-08-25 06:58:34

标签: c

我在Windows上查看limits.h时发现:

#define LLONG_MAX     9223372036854775807i64       // maximum signed long long int value
#define LLONG_MIN   (-9223372036854775807i64 - 1)  // minimum signed long long int value
#define ULLONG_MAX    0xffffffffffffffffui64       // maximum unsigned long long int value

该值末尾的i64是什么意思?

1 个答案:

答案 0 :(得分:5)

后缀i64是Microsoft的扩展名,用于指定64位整数常量。

一种可移植的替代方案是(int64_t)9223372036854775807,但是较旧的Microsoft C版本不支持C99 <stdint.h>类型。

您还可以使用标准后缀LL指定类型为long long的常量,该常量至少具有63个值位,但在某些平台上可能具有更多的值。 L的情况并不重要,因此1ll等效于1LL,但更加混乱,因为l看起来很像1,尤其是对于某些固定字体。

请注意,9223372036854775807作为整数常量具有最小的类型,其范围足以在列表intlong intlong long int中表示出来。考虑到这些类型在Microsoft平台上的通用大小,long long int类型可能是唯一具有64位的类型。

后缀对较小的常量(例如1)更有用,如下所示:

uint64_t x = 1 << 32;     // undefined behavior
uint64_t x = 1ULL << 32;  // fully defined, x is 0x800000000
uint64_t x = 1ui64 << 32; // Microsoft specific, non portable