我正在使用带有gcc
的Ubuntu 10.10(64位),我想在我的C ++程序中使用64位整数。
在我的系统上,sizeof(long)
,sizeof(long long int)
和sizeof(int64_t)
的输出都是8字节(64位)。
您建议使用64位整数的哪个限定符(long
,long long
或int64_t
)?
答案 0 :(得分:25)
int64_t
- 这是因为它是最便携的表示。其他两个可以在其他机器上表示不同。
答案 1 :(得分:8)
int64_t。如果需要64位,请明确声明。长长的长度因机器而异。
答案 2 :(得分:8)
您是否需要64位或至少64位?
使用最明确表达您意图的int64_t
,int_least64_t
或int_fast64_t
中的任何一个。 (这三种方法几乎肯定是当前系统中的相同类型,但记录您的意图很有价值。)
所有实施都必须提供int_least64_t
和int_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;