我在使用Ubuntu 10.10(64位)和gcc
,我想在我的C++程序中使用64位整數。在GNU/Linux中表示64位整數
在我的系統上,sizeof(long)
,sizeof(long long int)
和sizeof(int64_t)
的輸出都是8個字節(64位)。
對於使用64位整數,您推薦使用哪個限定符(long
,long long
或int64_t
)?
我在使用Ubuntu 10.10(64位)和gcc
,我想在我的C++程序中使用64位整數。在GNU/Linux中表示64位整數
在我的系統上,sizeof(long)
,sizeof(long long int)
和sizeof(int64_t)
的輸出都是8個字節(64位)。
對於使用64位整數,您推薦使用哪個限定符(long
,long long
或int64_t
)?
int64_t
- 這是因爲它是最便攜的代表。其他兩臺機器可以在其他機器上以不同方式表示。
int64_t。如果您需要64位,請明確聲明。長和長的尺寸因機器而異。
您是否需要正好64位或至少64位?
使用int64_t
,int_least64_t
或int_fast64_t
中的任何一個都可以清楚地表達您的意圖。 (這三者幾乎可以肯定是目前系統中的相同類型,但記錄您的意圖是有價值的。)
所有實施必須提供int_least64_t
和int_fast64_t
。至少在理論上int64_t
可能不存在(例如,如果編譯器有128位類型但不是64位類型,或者有符號整數不是用2的補碼錶示)。
(但在每一個我所見過C99上下的實施,long long
正好是64位,int64_t
存在。)
+1用於提醒最少和快速類型的別名。 –
定義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;
+1。考慮Win64 LLP64和Unix LP64:http://en.wikipedia.org/wiki/64-bit#64-bit_data_models –