2011-12-04 18 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,、またはint64_t)をお勧めしますか?

答えて

25

int64_t - これは最も移植性の高い表現であるためです。他の2つは、他のマシン上で異なって表現することができます。

+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_tint_least64_t、またはint_fast64_tのいずれかがあなたの意図を最も明確に表しているかどうかを使用してください。 (現在のシステムでは3つのタイプはほぼ同じタイプですが、あなたの意図を文書化することは貴重です)。

すべての実装では、とint_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; 
関連する問題