我在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
是什么意思?
答案 0 :(得分:5)
后缀i64
是Microsoft的扩展名,用于指定64位整数常量。
一种可移植的替代方案是(int64_t)9223372036854775807
,但是较旧的Microsoft C版本不支持C99 <stdint.h>
类型。
您还可以使用标准后缀LL
指定类型为long long
的常量,该常量至少具有63个值位,但在某些平台上可能具有更多的值。 L
的情况并不重要,因此1ll
等效于1LL
,但更加混乱,因为l
看起来很像1
,尤其是对于某些固定字体。
请注意,9223372036854775807
作为整数常量具有最小的类型,其范围足以在列表int
,long int
,long 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