unsigned long int
32-बिट कंप्यूटर पर दस अंकों की संख्या (1,000,000,000 - 9,999,999,999) रख सकते हैं?
साथ ही, की सीमाओं क्या कर रहे हैं unsigned long int
, long int
, unsigned int
, short int
, short unsigned int
, और int
?
जवाबों:
कम से कम श्रेणियों पर भरोसा कर सकते हैं, वे हैं:
short int
तथा int
: -32,767 से 32,767unsigned short int
तथा unsigned int
: 0 से 65,535long int
: -2,147,483,647 से 2,147,483,647unsigned long int
: 0 से 4,294,967,295इसका मतलब यह है कि नहीं, किसी भी 10 अंकों की संख्या को स्टोर करने के लिए भरोसा long int
नहीं किया जा सकता है। हालाँकि, long long int
C99 C में C99 और C ++ में C के लिए एक बड़ा प्रकार पेश किया गया था (यह प्रकार अक्सर पुराने मानकों के लिए एक संकलक द्वारा विस्तार के रूप में भी समर्थित है जिसमें इसे शामिल नहीं किया गया था)। इस प्रकार की न्यूनतम सीमा, यदि आपका कंपाइलर इसका समर्थन करता है, तो यह है:
long long int
: -9,223,372,036,854,775,807 से 9,223,372,036,854,775,807unsigned long long int
: 0 से 18,446,744,073,709,551,615तो वह प्रकार काफी बड़ा होगा (फिर, यदि आपके पास उपलब्ध है)।
उन लोगों के लिए एक नोट जो मानते हैं कि मैंने इन निचले सीमाओं के साथ गलती की है - मैंने नहीं किया है। पर्वतमाला के लिए सी आवश्यकताओं को लोगों के पूरक या संकेत-परिमाण पूर्णांक अभ्यावेदन के लिए अनुमति देने के लिए लिखा जाता है, जहां सबसे कम प्रतिनिधित्व योग्य मूल्य और उच्चतम प्रतिनिधित्व योग्य मूल्य केवल संकेत में भिन्न होते हैं। इसे दो के पूरक प्रतिनिधित्व के लिए भी अनुमति दी गई है जहां साइन बिट 1 और सभी मान बिट 0 के साथ मान एक कानूनी मूल्य के बजाय एक जाल प्रतिनिधित्व है । दूसरे शब्दों में, int
है नहीं मूल्य -32,768 प्रतिनिधित्व करने के लिए सक्षम होने के लिए जरूरी है।
int
मतलब long int
।
संख्यात्मक प्रकारों का आकार C ++ मानक में परिभाषित नहीं है, हालांकि न्यूनतम आकार हैं। यह बताने का तरीका कि वे आपके प्लेटफ़ॉर्म पर किस आकार के हैं, संख्यात्मक सीमा का उपयोग करना है
उदाहरण के लिए, एक इंट के लिए अधिकतम मूल्य द्वारा पाया जा सकता है:
std::numeric_limits<int>::max();
कंप्यूटर बेस 10 में काम नहीं करते हैं, जिसका अर्थ है कि अधिकतम मान 2 n -1 के रूप में होगा क्योंकि मेमोरी में संख्याओं का प्रतिनिधित्व कैसे किया जाता है। उदाहरण के लिए आठ बिट्स (1 बाइट) लें
0100 1000
दाएं सबसे थोड़ा (संख्या) जब सेट 1 पर 2 0 का प्रतिनिधित्व करता है , तो अगला बिट 2 1 का , फिर 2 2 और इसी तरह से जब तक हम बाईं ओर नहीं पहुंचते हैं, यदि संख्या अहस्ताक्षरित है तो 2 7 का प्रतिनिधित्व करता है ।
तो संख्या 2 6 + 2 3 = 64 + 8 = 72 का प्रतिनिधित्व करती है , क्योंकि दाईं ओर से 4 बिट और बाईं ओर 7 वें बिट सेट हैं।
यदि हम सभी मानों को 1 पर सेट करते हैं:
11111111
संख्या अब ( अहस्ताक्षरित मानकर )
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8 - 1
और जैसा कि हम देख सकते हैं, यह सबसे बड़ा संभव मूल्य है जिसे 8 बिट्स के साथ दर्शाया जा सकता है।
मेरी मशीन पर और इंट और एक लंबे समय तक समान हैं, प्रत्येक -2 31 से 2 31 के बीच रखने में सक्षम हैं - 1. मेरे अनुभव में आधुनिक 32 बिट डेस्कटॉप मशीन पर सबसे आम आकार है।
अपने सिस्टम की सीमाओं का पता लगाने के लिए :
#include <iostream>
#include <limits>
int main(int, char **) {
std::cout
<< static_cast< int >(std::numeric_limits< char >::max()) << "\n"
<< static_cast< int >(std::numeric_limits< unsigned char >::max()) << "\n"
<< std::numeric_limits< short >::max() << "\n"
<< std::numeric_limits< unsigned short >::max() << "\n"
<< std::numeric_limits< int >::max() << "\n"
<< std::numeric_limits< unsigned int >::max() << "\n"
<< std::numeric_limits< long >::max() << "\n"
<< std::numeric_limits< unsigned long >::max() << "\n"
<< std::numeric_limits< long long >::max() << "\n"
<< std::numeric_limits< unsigned long long >::max() << "\n";
}
ध्यान दें कि long long
केवल C99 में और C ++ 11 में कानूनी है।
यहाँ अन्य लोग data_sizes और precisions आदि के लिए लिंक पोस्ट करेंगे।
मैं आपको यह बताने जा रहा हूं कि यह कैसे पता लगाना है।
एक छोटा सा ऐप लिखें जो निम्नलिखित कार्य करेगा।
unsigned int ui;
std::cout << sizeof(ui));
यह होगा (संकलक और अभिलेख के आधार पर) 2, 4 या 8 प्रिंट, 2 बाइट्स लंबे, 4 बाइट्स लंबे आदि।
मान लेते हैं कि यह 4 है।
अब आप चाहते हैं कि अधिकतम मूल्य 4 बाइट्स स्टोर कर सकें, एक बाइट के लिए अधिकतम मूल्य (हेक्स में) 0xFF है। चार बाइट्स का अधिकतम मूल्य 0x है, इसके बाद 8 f's (प्रत्येक बाइट के लिए f की एक जोड़ी, 0x कंपाइलर को बताता है कि निम्नलिखित स्ट्रिंग एक हेक्स संख्या है)। अब उस मान को असाइन करने और परिणाम प्रिंट करने के लिए अपना कार्यक्रम बदलें
unsigned int ui = 0xFFFFFFFF;
std::cout << ui;
आधार मान जो एक अहस्ताक्षरित int पकड़ सकता है, आधार 10 प्रतिनिधित्व में दिखाया गया है।
अब लंबे समय तक, शॉर्ट्स और किसी भी अन्य INTEGER मूल्य के बारे में आप उत्सुक हैं।
एनबी: यह दृष्टिकोण फ्लोटिंग पॉइंट नंबरों (यानी डबल या फ्लोट) के लिए काम नहीं करेगा।
उम्मीद है की यह मदद करेगा
C ++ में, अब int और अन्य डेटा 2 की तारीफ विधि का उपयोग करके संग्रहीत किया जाता है। इसका मतलब है कि सीमा है:
-2147483648 to 2147483647
या -2 ^ 31 से 2 ^ 31-1
1 बिट 0 के लिए आरक्षित है इसलिए सकारात्मक मान 2 ^ (31) से कम है
आप हेडर फ़ाइल में मौजूद numeric_limits<data_type>::min()
और numeric_limits<data_type>::max()
फ़ंक्शंस का उपयोग कर सकते हैं और limits
प्रत्येक डेटा प्रकार की सीमा पा सकते हैं।
#include <iostream>
#include <limits>
using namespace std;
int main()
{
cout<<"Limits of Data types:\n";
cout<<"char\t\t\t: "<<static_cast<int>(numeric_limits<char>::min())<<" to "<<static_cast<int>(numeric_limits<char>::max())<<endl;
cout<<"unsigned char\t\t: "<<static_cast<int>(numeric_limits<unsigned char>::min())<<" to "<<static_cast<int>(numeric_limits<unsigned char>::max())<<endl;
cout<<"short\t\t\t: "<<numeric_limits<short>::min()<<" to "<<numeric_limits<short>::max()<<endl;
cout<<"unsigned short\t\t: "<<numeric_limits<unsigned short>::min()<<" to "<<numeric_limits<unsigned short>::max()<<endl;
cout<<"int\t\t\t: "<<numeric_limits<int>::min()<<" to "<<numeric_limits<int>::max()<<endl;
cout<<"unsigned int\t\t: "<<numeric_limits<unsigned int>::min()<<" to "<<numeric_limits<unsigned int>::max()<<endl;
cout<<"long\t\t\t: "<<numeric_limits<long>::min()<<" to "<<numeric_limits<long>::max()<<endl;
cout<<"unsigned long\t\t: "<<numeric_limits<unsigned long>::min()<<" to "<<numeric_limits<unsigned long>::max()<<endl;
cout<<"long long\t\t: "<<numeric_limits<long long>::min()<<" to "<<numeric_limits<long long>::max()<<endl;
cout<<"unsiged long long\t: "<<numeric_limits<unsigned long long>::min()<<" to "<<numeric_limits<unsigned long long>::max()<<endl;
cout<<"float\t\t\t: "<<numeric_limits<float>::min()<<" to "<<numeric_limits<float>::max()<<endl;
cout<<"double\t\t\t: "<<numeric_limits<double>::min()<<" to "<<numeric_limits<double>::max()<<endl;
cout<<"long double\t\t: "<<numeric_limits<long double>::min()<<" to "<<numeric_limits<long double>::max()<<endl;
}
आउटपुट होगा: डेटा प्रकार की सीमाएं:
के लिए अहस्ताक्षरित डेटा प्रकार वहाँ कोई संकेत नहीं बिट है और सभी बिट्स डेटा के लिए कर रहे हैं; जबकि हस्ताक्षरित डेटा प्रकार के लिए MSB को संकेत बिट और शेष बिट्स को डेटा के लिए संकेत दिया जाता है।
निम्नलिखित चीजों को करने के लिए सीमा खोजें:
चरण: 1 -> डेटा प्रकार देने के लिए बाइट्स का पता लगाएं।
चरण: 2 -> निम्नलिखित गणना लागू करें।
Let n = no of bits in data type
For signed data type ::
Lower Range = -(2^(n-1))
Upper Range = (2^(n-1)) - 1)
For unsigned data type ::
Lower Range = 0
Upper Range = (2^(n)) - 1
उदाहरण के लिए
अहस्ताक्षरित अंतर आकार के लिए = 4 बाइट्स (32 बिट्स) -> रेंज [0, (2 ^ (32)) - 1]
हस्ताक्षरित अंतर आकार के लिए = 4 बाइट्स (32 बिट्स) -> रेंज [- (2 ^ (32-1)), (2 ^ (32-1)) - 1]
नहीं, केवल दस अंकों की संख्या का एक हिस्सा एक अहस्ताक्षरित लंबे इंट में संग्रहीत किया जा सकता है जिसकी वैध सीमा 0 से 4,294,967,295 है। आप इसका उल्लेख कर सकते हैं: http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx
आपको किसी दिए गए प्रकार के संख्यात्मक_आल्ट्स <> के विशेषणों को देखना चाहिए। हेडर में इसकी।