2009-10-06 15 views
13

जीसीसी समर्थन करता है:क्या जीसीसी लंबे समय तक int का समर्थन करता है?

long long int 

जो एक 64-बिट पूर्णांक हो सकता है?

इसके अलावा, long long int मानक का हिस्सा है?

+0

सभी को धन्यवाद, मैंने पहले 64 बिट डेटा के साथ कभी नहीं खेला है और मैं आलसी आज रात डर लग रहा है। – Polaris878

+0

ध्यान दें कि एक C99 वातावरण में, आपको पोर्टेबल 64-बिट पूर्णांक के लिए '' में 'int64_t' का उपयोग करना चाहिए। यदि आप सी 99 वातावरण में नहीं हैं, तो 'लंबी अवधि' आपकी सबसे अच्छी शर्त है, लेकिन वास्तव में यह 64 बिट चौड़े होने की गारंटी नहीं है। –

+0

एसटी: ठीक है, यह * कम से कम * 64-बिट चौड़े होने की गारंटी है, इसलिए उसे चिंता नहीं करनी चाहिए कि वहां कहीं बाहर है <64. अनुरूप अनुरूप कार्यान्वयन में नहीं, वैसे भी। – DigitalRoss

उत्तर

31

हाँ जीसीसी long long int का समर्थन करता है, जो सी 99 मानक का हिस्सा है।

मानक बिट्स में इसका आकार जनादेश नहीं है, लेकिन <limits.h> में LLONG_MIN और LLONG_MAX के मूल्यों की आवश्यकता मतलब यह कम से कम है 64-बिट (सटीक 64-बिट विस्तृत पूर्णांक प्रकार के होते हैं <stdint.h> से int64_t/uint64_t)।

  1. LLONG_MIN होना चाहिए पर सबसे -9223372036854775807
  2. LLONG_MAX कम से कम 9223372036854775807
+1

बस जोड़ने के लिए .. विंडोज़ में इसके बराबर होगा _int64 – vpram86

+7

असल में, सख्त होने के लिए, यह (जो सी 99 भी है) से int64_t के बराबर है। –

+0

मैं इस हेडर को कभी नहीं जानता! धन्यवाद! – vpram86

10

long long int सी 99 मानक का एक हिस्सा है, और मुझे पता है कि जीसीसी इसका समर्थन करता है। And now I can prove it.

2

मुझे विश्वास है कि आम तौर पर एक unsigned long long एक 64-बिट पूर्णांक के पारंपरिक प्रतिनिधित्व है होना चाहिए। मुझे लगता है कि long long int भी काम करेगा, लेकिन मैंने कभी भी इस तरह से घोषित किसी भी 64-बिट वार्स को व्यक्तिगत रूप से कभी नहीं देखा है।

+2

'लंबी लंबी int' सिर्फ एक हस्ताक्षरित 64-बिट (या अधिक) पूर्णांक है। इसके बारे में विशेष रूप से असामान्य कुछ भी नहीं। – bdonlan

8

मेरी 32-बिट मशीन पर,

int main() 
{ 
    printf("%d\n", sizeof(long long int)); 
    return 0; 
} 

gcc प्रिंट 8 (8 बाइट्स * 8 बिट/बाइट = 64 बिट्स) के साथ संकलित।

+18

'size_t' प्रारूप तारों का उपयोग' "% zu" '' ''% d "' ('ssize_t' ''% zd" 'का उपयोग करना चाहिए) का उपयोग करना चाहिए। यह 64-बिट प्लेटफॉर्म पर एक समस्या है, जहां size_t अक्सर 64-बिट प्रकार होता है, जबकि int अभी भी 32-बिट हो सकता है। – bdonlan

+1

आकार (char) == 1 परिभाषा के अनुसार लेकिन यह> = एक बाइट होने की अनुमति है। तो 64 बिट प्रकारों को sizef (टी) == 1 होने की अनुमति है। –

5

हां, long long सी 99 का हिस्सा है, साथ ही long long स्थिरांक (10222333444555LL) और कुछ समर्थन तत्व हैं। (LLONG_MAX, llrint(d), llround(d), कुछ अन्य।) और जीसीसी ने इसे कुछ समय के लिए लागू किया है।

5

आदेश लंबे पूर्णांक चर मुद्रित करने के लिए में:

long long int lli = 100000000; 

printf("%lld\n", lli); 
4

लंबे देशांतर में अच्छी तरह से समर्थन कर रहे हैं, और एक लंबे लंबे समय [खेद] के लिए किया गया है। जैसा कि मैं इसे समझता हूं, यह 64-बिट प्लेटफ़ॉर्म पर 128 बिट होना चाहिए था, लेकिन जीसीसी में संगतता/पोर्टेबिलिटी कारणों के लिए, 64-बिट चौड़ाई पर मानकीकृत किया गया है।

यह भी देखें: (यू) int128_t, और इस discussion on GCC's 128-bit integer support

+0

"यह 64-बिट प्लेटफार्मों पर 128 बिट होना चाहिए": इस पुष्टि को किसी भी तरह से समर्थन देने की देखभाल? –

+0

मैंने कहा, "जैसा कि मैं इसे समझता हूं"। मैं केवल इस विचार का समर्थन कर सकता हूं, क्योंकि विकिपीडिया कहता है, "शब्द का प्रयोग बिट्स के एक छोटे समूह के लिए किया जाता है जिसे एक विशेष आर्किटेक्चर के प्रोसेसर द्वारा एक साथ संभाला जाता है। इस प्रकार का शब्द सीपीयू-विशिष्ट है।" तो तार्किक रूप से, एक लंबा लंबा शब्द एक व्यापक कमान पर लंबा होगा। हालांकि, वही विकिपीडिया पेज से, वास्तव में मानक लगता है कि लंबे समय तक 64-बिट है। http://en.wikipedia.org/wiki/Integer_%28computer_science%29 –

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