在GNU / Linux中表示64位整数

我正在使用带有gcc Ubuntu 10.10(64位),我想在我的C ++程序中使用64位整数。

在我的系统上, sizeof(long)sizeof(long long int)sizeof(int64_t)的输出都是8字节(64位)。

您建议使用64位整数的哪个限定符( longlong longint64_t )?

int64_t – 这是因为它是最便携的表示forms。 其他两个可以在其他机器上表示不同。

的int64_t。 如果需要64位,请明确声明。 长长的长度因机器而异。

您需要64位还是至少64位?

使用int64_tint_least64_tint_fast64_t最清楚地表达您的意图。 (这三种方法几乎肯定是当前系统上的相同类型,但记录您的意图很有价值。)

所有实现都必须提供int_least64_tint_fast64_t 。 至少理论上可能int64_t可能不存在(例如,如果编译器具有128位类型但没有64位类型,或者如果有符号整数不使用2的补码表示)。

(但是在我见过的每个C99-ish实现中, long long正好是64位,并且int64_t存在。)

定义64位整数的自定义类型并在代码中使用它。 使用指令#ifdef可以选择合适的编译器。 统一一些整数的例子:

 #ifdef (_MSC_VER) #include  #define int8_t INT8 #define uint8_t UINT8 #define int16_t INT16 #define uint16_t UINT16 #define int32_t INT32 #define uint32_t UINT32 #define int64_t INT64 #define uint64_t UINT64 #else #include  #endif typedef uint8_t u8_t; typedef int8_t s8_t; typedef uint16_t u16_t; typedef int16_t s16_t; typedef uint32_t u32_t; typedef int32_t s32_t; typedef uint64_t u64_t; typedef int64_t s64_t;