सी ++ में सबसे बड़ा पूर्णांक डेटाटाइप कौन सा है?सी ++ में सबसे बड़ी डेटाटाइप?
उत्तर
बोर्लेन्ड और माइक्रोसॉफ्ट compilers में, __int64 शायद सबसे बड़ा तुम मिल सकता है।
long long
डेटा-प्रकार मानक सी 99 और सी ++ 0x में सबसे बड़ा अंतर्निहित अभिन्न डेटाटाइप है। जैसे कि अन्य सभी अभिन्न डेटा प्रकारों के साथ, long long
बाइट्स में सटीक आकार नहीं दिया जाता है। इसके बजाए, इसे कम से कम एक 64-बिट पूर्णांक माना जाता है। जबकि long long
आधिकारिक सी ++ मानक का हिस्सा नहीं है, यह सर्वव्यापी आधुनिक कंपाइलरों में समर्थित है। नोट, हालांकि, आधुनिक डेस्कटॉप के लिए कई कंपाइलर्स long
और long long
को बिल्कुल 64-बिट्स के रूप में परिभाषित करते हैं, जबकि एम्बेडेड प्रोसेसर के लिए कई कंपाइलर 0 -को 32-बिट्स और long long
के रूप में 64-बिट्स (स्पष्ट रूप से कुछ अपवाद) के रूप में परिभाषित करते हैं।
यदि आपको अधिक सटीकता की आवश्यकता है या बिल्कुल long long
भाषा एक्सटेंशन का उपयोग नहीं कर सकते हैं, तो आपको सी या सी ++ पुस्तकालयों में से एक का उपयोग करना होगा जो अत्यधिक बड़ी या छोटी संख्याओं के साथ काम करने के लिए डिज़ाइन किए गए हैं।
आप अपनी कक्षा को परिभाषित करके आसानी से बड़ा डेटाटाइप प्राप्त कर सकते हैं। आप जावा में बिगइंटर से प्रेरित हो सकते हैं। यह एक अच्छा है लेकिन यह एक वास्तविक पूर्णांक नहीं है, भले ही यह बिल्कुल एक जैसा कार्य करता हो।
128 बिट पैक पूर्णांक और चल बिन्दु compilers कि SSE समर्थन SSE रजिस्टरों और निर्देश के उपयोग को सक्षम करने पर xmmintrin.h में परिभाषित स्वरूपों रहे हैं। वे पाठ्यक्रम के सी ++ मानक का हिस्सा नहीं हैं, लेकिन चूंकि वे एमएसवीसी, जीसीसी और इंटेल सी ++ कंपाइलर द्वारा समर्थित हैं, वहां क्रॉस-प्लेटफ़ॉर्म समर्थन की एक डिग्री है (कम से कम ओएस एक्स, लिनक्स और विंडोज इंटेल सीपीयू के लिए विंडोज)। अन्य आईएसए में सिम एक्सटेंशन हैं इसलिए शायद अन्य प्लेटफ़ॉर्म/कंपाइलर विशिष्ट एक्सटेंशन हैं जो 128 या 256 बिट सिम निर्देशों का समर्थन करते हैं। इंटेल के आने वाले एवीएक्स निर्देश सेट में 256 बिट रजिस्ट्रार होंगे, इसलिए हमें इसके लिए डेटा प्रकारों और इंट्रिनिक्स का एक नया सेट देखना चाहिए।
वे अंतर्निहित डेटा प्रकारों की तरह व्यवहार नहीं करते हैं (यानी, आपको ऑपरेटरों के बजाय आंतरिक कार्यों का उपयोग करना होगा, और वे सिमड ऑपरेशंस के साथ काम करते हैं) लेकिन चूंकि वे वास्तव में 128-बिट पर मानचित्र करते हैं हार्डवेयर पर पंजीकृत वे उल्लेखनीय लायक हैं।
सबसे बड़ी मानक सी ++ पूर्णांक प्रकार long
है।
सी में long long
है, और सी ++ 0x भी इसे जोड़ने जा रहा है, और निश्चित रूप से आप अपने स्वयं के कस्टम पूर्णांक प्रकार को लागू कर सकते हैं, शायद यहां तक कि एक बिगइन्ट क्लास भी।
लेकिन तकनीकी तौर पर, निर्मित पूर्णांक प्रकार पर विचार, long
अपने जवाब है।
तकनीकी रूप से, अगले सी ++ मानक में लंबे समय तक नहीं हो सकता है। इस देर के चरण में भी कुछ भी नहीं है जिसे मानक से खींचा जा सकता है। लेकिन एक (सही) पेडेंट होने के लिए +1 :-) – paxdiablo
और आपने * मुझे * एक पेडेंट कहा। ;) लेकिन हाँ, उचित बिंदु। फिलहाल, ऐसा लगता है कि यह सी ++ 0x में शामिल होने जा रहा है, लेकिन कौन जानता है। :) – jalf
अब हम जानते हैं- 'लंबा लंबा' सी ++ 11 में है। –
आप सबसे बड़ा करने के लिए मानचित्रण द्वारा आदिम नाम के बारे में चिंता से बचने के लिए पसंद कर सकते हैं (पूरी तरह से महसूस किया) संकलन वास्तुकला पर टाइप <cstdint>
और उसके typedefs intmax_t
और uintmax_t
के माध्यम से।
मैं कोई और हैरान था यह कहा है, लेकिन सरसरी अनुसंधान इंगित करता है यह सी ++ 11 है, जो शायद कमी की व्याख्या कर सकते पिछले उल्लेख है की में जोड़ा गया है। (हालांकि इसके साथी नए आदिम/अंतर्निर्मित प्रकार long long
उद्धृत थे!)
कुछ compilers भी बड़ा प्रकार प्रदान कर सकता है, हालांकि इन उदाहरण के लिए, चेतावनियां के साथ आ सकता है: Why in g++ std::intmax_t is not a __int128_t?
व्यक्तिगत रूप से, मैं cstdint
उपयोग कर रहा हूँ के रूप में यह आसान है जल्दी से देखने के लिए कितने बाइट्स न्यूनतम मैं उपयोग करने के बजाए - यह याद रखने के बजाए कि दिए गए आदिम कितने बिट्स से मेल खाते हैं - और मानक का मतलब है कि यह मेरे प्रकार प्लेटफॉर्म-निर्भर होने से बचाता है। इसके अलावा, मैं जो करता हूं, uint8_t
अंतहीन unsigned char
एस की तुलना में तेज़ और साफ है!
संपादित: uint8_t
unsigned char
के बराबर होने का इसकी गारंटी नहीं है: मसा में, मैं स्पष्ट करना चाहता हूँ। निश्चित रूप से, यह मेरी मशीनों पर है, और यह शायद आपके लिए भी है। लेकिन मानक द्वारा इस समकक्ष की आवश्यकता नहीं है; देखें: When is uint8_t ≠ unsigned char? इसी कारण से, अब जब मुझे [[un]signed] char
की मानक परिभाषित विशेष क्षमताओं की आवश्यकता है, तो मैं केवल यही उपयोग करता हूं।
डाउनवॉटर: क्या कोई वास्तविक समस्या है जिसके बारे में आप बाकी के बारे में बता सकते हैं, या क्या आप कुछ असंबंधित के बारे में कड़वाहट महसूस कर रहे हैं? –
boost::multiprecision::cpp_int
एक मनमाना सटीक पूर्णांक प्रकार है। तो सी ++ में कोई "सबसे बड़ा पूर्णांक डेटाटाइप" नहीं है। बस एक सबसे बड़ा निर्मित अभिन्न प्रकार, जो मानक सी ++ में AFAIK long
है।
__int128_t और __uint128_t (हस्ताक्षरित __int128_t) डेटा प्रकार 128 बिट लंबा हैं, लंबे समय के आकार को दोगुना करें (जो 64 बिट्स सी ++ के लिए नए हैं)। हालांकि, यदि आप उनका उपयोग करने जा रहे हैं, तो आपको कुछ ओवरलोडिंग करने की आवश्यकता है क्योंकि int128 डेटा प्रकार बहुत गहराई से समर्थित नहीं है (कम से कम मिंगव में)। इस तरह आप उपयोग कर सकते हैं का एक उदाहरण दिखाने के लिए 2^एक्स 1 2 तक^128-1
#include <iostream>
char base10_lookup_table[10]={'0','1','2','3','4','5','6','7','8','9'};
std::ostream&
operator<<(std::ostream& dest, __int128 value)
{
std::ostream::sentry s(dest);
if (s) {
__uint128_t tmp = value < 0 ? -value : value;
char buffer[ 128 ];
char* d = std::end(buffer);
do
{
-- d;
*d = base10_lookup_table[ tmp % 10 ];
tmp /= 10;
} while (tmp != 0);
if (value < 0) {
-- d;
*d = '-';
}
int len = std::end(buffer) - d;
if (dest.rdbuf()->sputn(d, len) != len) {
dest.setstate(std::ios_base::badbit);
}
}
return dest;
}
std::ostream&
operator<<(std::ostream& dest, unsigned __int128 value)
{
std::ostream::sentry s(dest);
if (s) {
__uint128_t tmp = value < 0 ? -value : value;
char buffer[ 128 ];
char* d = std::end(buffer);
do
{
-- d;
*d = base10_lookup_table[ tmp % 10 ];
tmp /= 10;
} while (tmp != 0);
if (value < 0) {
-- d;
*d = '-';
}
int len = std::end(buffer) - d;
if (dest.rdbuf()->sputn(d, len) != len) {
dest.setstate(std::ios_base::badbit);
}
}
return dest;
}
int main (void)
{
__uint128_t big_value = 0; //unsigned int128
for (unsigned char i=0; i!=129; ++i) //I am using an unsigned char because it can hold all the values that will be used
{
std::cout << "1 less than 2 to the power of " << int(i) << " = \0" << big_value << "\n";
big_value |= (__uint128_t)1 << i;
}
return 0; //formal way of exiting
}
int128 डेटाप्रकार के साथ समस्या यह है कि नहीं सभी compilers यह समर्थन कर सकते हैं है।
- 1. सी ++ सरणी में सबसे बड़ी संख्या ढूँढना
- 2. सी # डेटाटाइप को बराबर जावा डेटाटाइप
- 3. सी में फ्लोटिंग पॉइंट डेटाटाइप की रेंज?
- 4. सी # दशमलव डेटाटाइप प्रदर्शन
- 5. सी ++ std :: मानचित्र में सबसे बड़ी कुंजी कैसे खोजें?
- 6. सी # और ओरेकल संख्या डेटाटाइप
- 7. सी # डेटाटाइप बनाम MySQL datatypes
- 8. सी ++ में बड़ी संख्या में हैंडलिंग?
- 9. गिट: सबसे बड़ी प्रतिबद्धता पाएं
- 10. MySQL में मुद्राओं के लिए सबसे अच्छा डेटाटाइप क्या है?
- 11. डेटाटाइप
- 12. स्थानिक एसक्यूएल: एक वर्ग के लिए सबसे उपयुक्त डेटाटाइप?
- 13. एक डेटाटाइप में Z3
- 14. SQL सर्वर डेटाबेस में सबसे बड़ी ऑब्जेक्ट्स कैसे खोजें?
- 15. सी: मुद्रण बड़ी संख्या
- 16. सी ++ स्ट्रिंग शाब्दिक के डेटाटाइप क्या है?
- 17. सबसे बड़ी-एन-प्रति-समूह एसक्यूएल क्वेरी
- 18. सी में सामान्य डेटाटाइप के लिए कोई पुस्तकालय?
- 19. उचित डेटाटाइप
- 20. हस्ताक्षरित डेटाटाइप क्या है?
- 21. सी # बड़ी छवियों को सहेजना
- 22. सी # संकलन समय बड़ी परियोजनाओं (सी ++ की तुलना में)
- 23. क्रियालेख के लिए डेटाटाइप के आकार 3
- 24. बड़ी संख्या में नोड्स
- 25. एक सरणी में सबसे छोटी और सबसे बड़ी संख्या कैसे खोजें?
- 26. मैं कॉलम को संरेखित कैसे कर सकता हूं जहां सबसे बड़ी संख्या या सबसे बड़ी स्ट्रिंग संरेखक संकेतक है?
- 27. सबसे बड़ी तीन चींटियों को खोजने के लिए सबसे प्रभावी तरीका
- 28. बड़ी मात्रा में टेक्स्ट
- 29. प्राथमिक कुंजी डेटाटाइप
- 30. हास्केल डेटाटाइप जावा (ओओ)
"... लंबे समय तक लंबे और लंबे समय तक दोनों आधुनिक डेस्कटॉप सीपीयू पर 64-बिट होंगे।" सच नहीं। कंपाइलर पर निर्भर करता है। एलएलपी 64 मॉडल (जिसे वीसी द्वारा उपयोग किया जाता है) में, 'लम्बा' 32-बिट और 'लंबा लंबा' 64-बिट रहता है। –
संभावित 64 बिट मेमोरी मॉडल के लिए यह लिंक http://en.wikipedia.org/wiki/LLP64#Specific_data_models देखें। –
एफवाईआई, 'लंबे समय तक' सी ++ मानक में नहीं है। इसे सी 99 में सी में जोड़ा गया है। वर्तमान में, यह अधिकांश कंप्यूटर्स द्वारा समर्थित एक सर्वव्यापी एक्सटेंशन है। –