在GNU / Linux中表示64位整数

时间:2011-12-04 06:37:07

标签: c++ c 64-bit long-integer

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

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

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

4 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:8)

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

答案 2 :(得分:8)

您是否需要64位或至少64位?

使用最明确表达您意图的int64_tint_least64_tint_fast64_t中的任何一个。 (这三种方法几乎肯定是当前系统中的相同类型,但记录您的意图很有价值。)

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

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

答案 3 :(得分:-2)

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

#ifdef (_MSC_VER)

#include <basetsd.h>

#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 <inttypes.h>

#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;