2011-03-21 13 views
34

क्या सी ++ में लंबे लंबे int से अधिक प्रकार हैं?क्या सी ++ में लंबे लंबे int से अधिक प्रकार हैं?

मेरा कंपाइलर जी ++ है।

+1

किस प्रकार आप के बारे में बात कर रहे हैं के रूप में यह लेबल करके एक int के दायरे का विस्तार कर सकते हैं? इंटीजर प्रकार या किसी भी प्रकार? इस मामले में "बड़ा" क्या है: सीमा या आकार? किसी भी मामले में, 'int [100]' टाइप करें, जो कि 'लंबे समय तक' से काफी बड़ा है, लेकिन मुझे नहीं लगता कि यह वही है जो आप पूछ रहे हैं। अपने प्रश्न स्पष्ट करें। इस समय यह थोड़ा समझ में आता है। – AnT

+1

आप लंबे समय तक कोशिश कर सकते हैं (मैं सिर्फ मजाक कर रहा हूं) मेरा मानना ​​है कि सभी आर्किटेक्चर पर 64 बिट्स पर सबसे लंबे समय तक –

+1

@ जेसस रामोस: कम से कम 64 बिट्स (बड़ा हो सकता है)। @AndreyT: आधिकारिक तौर पर नहीं, लेकिन यह लगभग सर्वव्यापी विस्तार है जिसे हम मानक के अगले संस्करण में देखने की उम्मीद करते हैं (हमें सी के साथ लाइन में लाने के लिए)। –

उत्तर

5

__int128
__uint128

+4

__int128 माइक्रोसॉफ्ट विजुअल –

+0

@ ब्रेंडन वेबस्टर पर सक्षम नहीं है क्या आप इसे सक्षम कर सकते हैं? –

8

नहीं है, लेकिन आप बड़ी संख्या को संभालने के लिए GMP तरह पुस्तकालयों का उपयोग कर सकते हैं।

14

एक gcc extension for 128 bit integers है।

+0

नोट: 'intmax_t' इसे नहीं मानता है http://stackoverflow.com/questions/21265462/why-in-g-stdintmax-t-is-not-a-int128-t –

9

क्या अपनी जरूरत पर निर्भर करता है, तो आप को संभालने के लिए अपने स्वयं के struct बना सकते हैं डेटा प्रकार:

#include <cstdint> 

struct uint256_t 
{ 
    std::uint64_t bits[4]; 
}; 

uint256_t x; 
2

सारांश ...

आप सटीक पूर्णांक मूल्यों है कि फिट नहीं होगा स्टोर करने के लिए की जरूरत है 'लंबे समय तक' में, जीसीसी __int128 प्रकार प्रदान करता है। यह एक जीसीसी एक्सटेंशन है, मानक सी ++ (इस लेखन के रूप में) का हिस्सा नहीं है।

यदि आपको यहां तक ​​कि बड़े सटीक पूर्णांक मानों के साथ काम करने की आवश्यकता है, तो आपको शायद arbitrary-precision arithmetic package, जैसे GMP की आवश्यकता है। यदि आपकी आवश्यकता बहुत सीमित है तो आप अपना खुद का विस्तारित सटीक कोड रोल कर सकते हैं, लेकिन मौजूदा पुस्तकालय का उपयोग करने से यह जल्दी से अधिक जटिल (और कम कुशल और विश्वसनीय) बन सकता है।

आप बड़ी संख्या में स्टोर करने के लिए की जरूरत है लेकिन वास्तव में बड़ा मान संग्रहीत की जरूरत नहीं है, तो आप नाव या डबल उपयोग कर सकते हैं: ये हैं, लेकिन कम precision साथ बहुत बड़ा परिमाण की संख्या का प्रतिनिधित्व कर सकते हैं।

और बेशक, अगर आप सिर्फ अधिक स्मृति को लेने के लिए, एक सरणी ;-)

+0

' streampos का उपयोग करने की संभावना हो सकती है ', आकार के आधार पर आवश्यक है? – jorgen

4

मानक

विस्तारित पूर्णांक प्रकार घोषित चाहते स्पष्ट रूप से C और C++ मानकों के द्वारा की अनुमति है।

सी ++ 11

C++11 N3337 draft 3.9.1 "मौलिक प्रकार" पैरा 3 का कहना है:

वहाँ पाँच मानक पर हस्ताक्षर किए पूर्णांक प्रकार के होते हैं: "पर हस्ताक्षर किए चार", "कम पूर्णांक", "Int", "लंबा int", और "लंबा लंबा int"। इस सूची में, प्रत्येक प्रकार कम से कम उतना भंडारण प्रदान करता है जितना कि सूची में पहले। क्रियान्वयन-परिभाषित विस्तारित पूर्णांक प्रकार भी हो सकते हैं। मानक और विस्तारित हस्ताक्षरित पूर्णांक प्रकार सामूहिक रूप से हस्ताक्षरित पूर्णांक प्रकार कहा जाता है। सादा स्याही के पास निष्पादन पर्यावरण के आर्किटेक्चर द्वारा प्राकृतिक आकार का सुझाव दिया गया है, विशेष आवश्यकताओं को पूरा करने के लिए अन्य हस्ताक्षरित पूर्णांक प्रकार प्रदान किए जाते हैं।

तुम भी intmax_t, जो 18.4.1 "हैडर सार" पैरा 2 कहते हैं पर विचार करना चाहिए:

हैडर को परिभाषित करता है सभी कार्यों, प्रकार, और मैक्रो सी मानक में 7.18 के रूप में ही।

C99

C99 N1256 draft स्पष्ट 6.2.5 "प्रकार" अनुच्छेद 4 में उन्हें अनुमति देता है:

वहाँ पाँच मानक पर हस्ताक्षर किए पूर्णांक प्रकार, पर हस्ताक्षर किए चार, लघु पूर्णांक, पूर्णांक के रूप में नामित कर रहे हैं , लंबे int, और लंबे समय तक int। (ये और अन्य प्रकार हो सकते हैं जैसा कि 6.7.2 में वर्णित कई अतिरिक्त तरीकों से नामित किया गया है।) कार्यान्वयन-परिभाषित विस्तारित पूर्णांक प्रकार भी हो सकते हैं .8) मानक और विस्तारित हस्ताक्षरित पूर्णांक प्रकार सामूहिक रूप से हस्ताक्षरित पूर्णांक प्रकार कहलाते हैं। 29)

और 7.18.1.5 "महानतम-चौड़ाई पूर्णांक प्रकार" अनुच्छेद 1 का कहना है:

:

निम्न प्रकार एक हस्ताक्षरित पूर्णांक प्रकार किसी भी हस्ताक्षर किए पूर्णांक प्रकार के किसी भी मूल्य का प्रतिनिधित्व करने में सक्षम में नामित

intmax_t

0

तुम्हें पता है आपका नंबर हमेशा सकारात्मक होने जा रहा है, तो आप unsigned

int myNum; // Range is from –2,147,483,648 to 2,147,483,647

unsigned int myNum; // Range is from 0 to 4,294,967,295

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