2011-12-04 82 views
12

我在使用Ubuntu 10.10(64位)和gcc,我想在我的C++程序中使用64位整數。在GNU/Linux中表示64位整數

在我的系統上,sizeof(long)sizeof(long long int)sizeof(int64_t)的輸出都是8個字節(64位)。

對於使用64位整數,您推薦使用哪個限定符(long,long longint64_t)?

回答

25

int64_t - 這是因爲它是最便攜的代表。其他兩臺機器可以在其他機器上以不同方式表示。

+0

+1。考慮Win64 LLP64和Unix LP64:http://en.wikipedia.org/wiki/64-bit#64-bit_data_models –

8

int64_t。如果您需要64位,請明確聲明。長和長的尺寸因機器而異。

8

您是否需要正好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存在。)

+1

+1用於提醒最少和快速類型的別名。 –

0

定義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;