在GNU/Linux中表示64位整数

Representing a 64 bit integer in GNU/Linux

本文关键字:表示 64位 整数 Linux GNU      更新时间:2023-10-16

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

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

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

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

int64_t。如果需要64位,则显式声明。long和long的大小因机器而异。

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

使用int64_t, int_least64_tint_fast64_t中最清楚地表达您的意图的任何一个。(在当前的系统中,这三种类型几乎肯定是相同的,但是记录您的意图是有价值的。)

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

(但在我见过的每个类似c99的实现中,long long正好是64位,并且int64_t存在)

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