2011-12-04 7 views
12
में एक 64 बिट पूर्णांक

मैं gcc साथ उबंटू 10.10 (64 बिट) का उपयोग कर रहा है और मैं अपने सी ++ प्रोग्राम में एक 64 बिट पूर्णांक उपयोग करना चाहता था का प्रतिनिधित्व करते हुए।जीएनयू/लिनक्स

मेरे सिस्टम पर sizeof(long), sizeof(long long int) और sizeof(int64_t) के आउटपुट सभी 8 बाइट्स (64 बिट्स) हैं।

कौन सा क्वालीफायर (long, long long, या int64_t) क्या आप 64 बिट पूर्णांक का उपयोग करने की अनुशंसा करेंगे?

उत्तर

25

int64_t - इसका कारण यह है कि यह सबसे पोर्टेबल प्रतिनिधित्व है। अन्य दो अन्य मशीनों पर अलग-अलग प्रतिनिधित्व किया जा सकता है।

+0

+1। विन 64 एलएलपी 64 और यूनिक्स एलपी 64 पर विचार करें: http://en.wikipedia.org/wiki/64-bit#64-bit_data_models –

8

int64_t। यदि आपको 64 बिट्स की आवश्यकता है, तो इसे स्पष्ट रूप से घोषित करें। मशीन द्वारा लंबे और लंबे समय तक आकार बदलता है।

8

कि वास्तव में आप 64 बिट्स या कम से कम 64 बिट्स की ज़रूरत है?

int64_t, int_least64_t, या int_fast64_t का उपयोग करें जो आपके इरादे को स्पष्ट रूप से व्यक्त करता है। (सभी तीन वर्तमान सिस्टम पर एक ही प्रकार के होने के बारे में निश्चित हैं, लेकिन आपके इरादे को दस्तावेज करना मूल्यवान है।)

सभी कार्यान्वयन int_least64_t और int_fast64_t प्रदान करना होगा। यह कम से कम सैद्धांतिक रूप से संभव है कि int64_t मौजूद नहीं हो सकता है (कहें, यदि कंपाइलर के पास 128-बिट प्रकार है लेकिन 64-बिट प्रकार नहीं है, या यदि हस्ताक्षर किए गए पूर्णांक 2'-पूरक का उपयोग नहीं करते हैं)।

(लेकिन हर C99-ish कार्यान्वयन मैंने आज तक देखा है, 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; 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^