पूर्णांक का अधिकतम मूल्य


291

सी में, पूर्णांक (32 बिट मशीन के लिए) 32 बिट्स है, और यह -32,768 से +32,767 तक है। जावा में, पूर्णांक (लंबा) भी 32 बिट्स है, लेकिन -2,147,483,648 से +2,147,483,647 तक है।

मुझे समझ में नहीं आता है कि जावा में सीमा अलग कैसे है, भले ही बिट्स की संख्या समान हो। क्या कोई इसे समझा सकता है?


35
जावा में int के अधिकतम और न्यूनतम मान प्राप्त करने के लिए, Integer.MAX_VALUE और Integer.MIN_VALUE
live-

5
@stackuser - आपके प्रश्न के कुछ अच्छे उत्तर - आपको एक स्वीकार करना चाहिए :)
दरगाह ठीक

2
@DarraghEnright वह आखिरी बार मार्च 2015 में देखा गया था, मुझे संदेह है कि वह वापस आ रहा है :(
अनजानेर

4
@ एड्रियन हाहा - मुझे नहीं लगता! थोड़ा सा लगता है मुझे लगता है। मैंने हमेशा कल्पना की कि एसओ कुछ शर्तों के तहत आसानी से ऑटो-स्वीकार जवाब दे सकता है - जहां सवाल एक निश्चित उम्र से अधिक है, ओपी AWOL है और उच्च संख्या के साथ स्पष्ट रूप से उपयोगी उत्तर है।
दारोगा इनराइट

2
@DarraghEnright सहमत हैं। लेकिन ओपी 2 सप्ताह पहले यहां था, उसके पास स्वीकार करने का मौका था, इसलिए तकनीकी रूप से वह दूर नहीं है।
गाबर्सच

जवाबों:


394

में सी , स्वयं भाषा निश्चित डेटाटाइप्स के प्रतिनिधित्व निर्धारित नहीं करता है। यह मशीन से मशीन में भिन्न हो सकता है, एम्बेडेड सिस्टम पर int16 बिट चौड़ा हो सकता है, हालांकि आमतौर पर यह 32 बिट है।

केवल आवश्यकता यह है कि short int<= int<= long intआकार से। इसके अलावा, एक सिफारिश है कि intप्रोसेसर की मूल क्षमता का प्रतिनिधित्व करना चाहिए

सभी प्रकार के हस्ताक्षर हैं। unsignedसंशोधक आप मूल्य (अन्यथा यह संकेत बिट के लिए आरक्षित है) के हिस्से के रूप उच्चतम बिट का उपयोग करने की अनुमति देता है।

यहां संभावित डेटा प्रकारों के लिए संभावित मानों की एक छोटी तालिका दी गई है:

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

में जावा , जावा भाषा विशिष्टता डेटा प्रकार का प्रतिनिधित्व निर्धारित करता है।

आदेश है: byte8 बिट्स, short16 बिट्स, int32 बिट्स, long64 बिट्स। इन सभी प्रकारों पर हस्ताक्षर किए गए हैं , कोई अहस्ताक्षरित संस्करण नहीं हैं। हालांकि, बिट जोड़तोड़ संख्याओं का इलाज करते हैं क्योंकि वे अहस्ताक्षरित थे (यानी, सभी बिट्स को सही ढंग से संभालना)।

चरित्र डेटा प्रकार char16 बिट्स चौड़ा, अहस्ताक्षरित है , और UTF-16 एन्कोडिंग का उपयोग करके वर्णों को रखता है (हालांकि, यह charएक मनमाना अहस्ताक्षरित 16 बिट पूर्णांक निर्दिष्ट करना संभव है जो एक अमान्य वर्ण कोड बिंदु का प्रतिनिधित्व करता है)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535

10
C मानक INT_MAX, LONG_MAX, आदि के लिए न्यूनतम मान भी निर्दिष्ट करता है
ओलिवर चार्ल्सवर्थ

13
Java 8 ने अब Integer को भी अहस्ताक्षरित कर दिया है: docs.oracle.com/javase/8/docs/api/java/lang/Integer.html
Jakub Kotowski

4
धन्यवाद, @jkbkot, यह जानकर अच्छा लगा। हालांकि ऐसा लगता है कि प्रतिनिधित्व अभी भी हस्ताक्षरित है, लेकिन कुछ अहस्ताक्षरित कार्यों को एक फ़ंक्शन के रूप में लागू किया जाता है। यह दो अहस्ताक्षरित जोड़ना मुश्किल है int...
गाबर्सच

5
@GaborSch जावा में, int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));प्रिंट 2147483648और चार एक अहस्ताक्षरित प्रकार है
हॉल्गर

2
@ अतिवृद्धि के Integer.MAX_VALUE + 1कारण हेगर में है 0x80000000, (और बराबर Integer.MIN_VALUE)। यदि आप इसे अहस्ताक्षरित (लंबे) में परिवर्तित करते हैं, तो साइन बिट को मान बिट की तरह माना जाएगा, इसलिए यह होगा 2147483648charनोट के लिए धन्यवाद । charअहस्ताक्षरित है, आप सही हैं, लेकिन वास्तव में गणना के लिए चार का उपयोग नहीं किया जाता है, यही कारण है कि मैंने इसे सूची से छोड़ दिया।
गैबोरश

73

सी में, पूर्णांक (32 बिट मशीन के लिए) 32 बिट है और यह -32768 से +32767 तक है।

गलत। 2 के पूरक प्रतिनिधित्व में 32-बिट हस्ताक्षरित पूर्णांक में रेंज -2 31 से 2 31 -1 है जो -2,147,483,648 से 2,147,483,647 के बराबर है।


3
मैंने आपका घातांक तय किया, **सी भी नहीं है और मेरी राय में बहुत स्पष्ट नहीं है। :)
खोलना

2
अब बेहतर लग रहा है, धन्यवाद! बहुत ज्यादा पायथन, मुझे लगता है। मैं ^आमतौर पर इससे बचता हूंxor
कोस

5
मुझे लगता है कि मेरी बात यह है कि चूंकि C के पास एक्सपोनेंशन ऑपरेटर नहीं है, इसलिए मुझे नहीं लगता कि किसी विशेष टुकड़े को कोड के रूप में स्वरूपित किया जाना चाहिए। :)
खोलना

19

एक 32 बिट पूर्णांक -2,147,483,648 से 2,147,483,647 तक होता है। हालांकि यह तथ्य कि आप 32-बिट मशीन पर हैं, इसका मतलब यह नहीं है कि आपका Cकंपाइलर 32-बिट पूर्णांक का उपयोग करता है।


1
कम से कम मिस्टर केर्निघन और मिस्टर रिचीज़ की मेरी कॉपी "द सी प्रोग्रामिंग लैंग्वेज" A4.2 में कहती है कि int"मशीन की प्राकृतिक चौड़ाई" है जिसे मैं 32 बिट्स के रूप में समझाता हूँ जब 32 बिट मशीनों के लिए संकलन किया जाता है।
14

7
यह संकलक पर निर्भर करता है, न कि मशीन जो मैं मानता हूं। मेरे पास उदाहरण के लिए मेरी 64 बिट मशीन पर एक 16 बिट संकलक था।
Ivaylo Strandjev

बेशक 16 बिट x86 कोड के लिए आपके 16 बिट कंपाइलर ने केवल 16 बिट्स का उपयोग किया था। लेकिन वह मेरी बात नहीं थी। यहां तक ​​कि 16 बिट मोड में चलने वाले 32 बिट x86 प्रोसेसर की केवल एक देशी क्षमता है केवल 16 बिट्स। मेरा कहना है कि लक्ष्य मंच संकलक मायने रखता है। उदाहरण के लिए यदि आपके पास अपने 80286 का कंपाइलर है तो भी आप 16-बिट कोड जेनरेट करेंगे और इसलिए 16 बिट पूर्णांक हैं।
१५:०५

2
@ मेरा मानना ​​है कि मैं अपने जवाब में यही कहता हूं। यह ओएस नहीं है जो निर्दिष्ट करता है कि आपके पूर्णांक कितने बिट्स हैं। टारगेट प्लेटफ़ॉर्म कंपाइलर की एक संपत्ति है, ओएस की नहीं यह आपके द्वारा या प्रोसेसर पर काम कर रहा है।
Ivaylo Strandjev

जैसा कि मैंने अपनी पहली टिप्पणी में लिखा था। "32 बिट मशीनों के लिए संकलन करते समय यह 32-बिट्स है"। उसकी पोस्टिंग में ओपी राईट "पूर्णांक (32 बिट मशीन के लिए)" तो क्या मैं समझता हूँ कि वह अपने ओएस, या अपने मशीन की बात नहीं कर रहा है, वह अपने लक्ष्य मंच के लिए बात कर रहा है से
junix

15

C भाषा की परिभाषा विभिन्न डेटा प्रकारों के लिए न्यूनतम सीमाएँ निर्दिष्ट करती है । के लिए int, यह न्यूनतम रेंज -32767 से 32767 है, जिसका अर्थ कम से कम 16 बिट्स चौड़ा intहोना चाहिए । एक कार्यान्वयन एक व्यापक रूप से विस्तृत रेंज के साथ एक व्यापक प्रकार प्रदान करने के लिए स्वतंत्र है । उदाहरण के लिए, एसएलईएस 10 विकास सर्वर पर मैं काम करता हूं, रेंज -2147483647 से 2137483647 है।int

अभी भी कुछ सिस्टम ऐसे हैं जो 16-बिट intप्रकारों का उपयोग करते हैं (ऑल द वर्ल्ड इज़ नॉटवैक्स x86), लेकिन बहुत सारे हैं जो 32-बिट intप्रकारों का उपयोग करते हैं, और शायद कुछ जो 64-बिट का उपयोग करते हैं।

C भाषा को विभिन्न आर्किटेक्चर पर चलाने के लिए डिज़ाइन किया गया था। जावा को एक वर्चुअल मशीन में चलाने के लिए डिज़ाइन किया गया था जो उन वास्तु अंतरों को छुपाता है।


16-बिट इंट के लिए, यह -3276 8 से 32767 है। 32-बिट इंट के लिए, यह -214748364 8 से 2147483647 है। रेंज -2 ^ (n बिट्स -1) से + 2 ^ (n बिट्स -1) तक निर्दिष्ट है ) - 1.
पौराणिक 13

3
@ मावेन: 5.2.4.2.1 - के INT_MINरूप में निर्दिष्ट किया गया है -32767। दो के पूरक मत मानो।
जॉन बोडे

8

जावा के सख्त बराबर intहै long intसी में

संपादित करें: यदि int32_tपरिभाषित किया गया है, तो यह परिशुद्धता के मामले में बराबर है। long intजावा की शुद्धता की गारंटी दें int, क्योंकि यह आकार में कम से कम 32 बिट्स होने की गारंटी है।


आप सही हैं, int32_tयदि यह आपके संकलक द्वारा परिभाषित किया गया है तो समतुल्य है
UmNyobe

7

ऐसा इसलिए है क्योंकि 32 बिट मशीन पर C - पूर्णांक का मतलब यह नहीं है कि इसे संग्रहीत करने के लिए 32 बिट्स का उपयोग किया जाता है, यह 16 बिट्स भी हो सकता है। यह मशीन (कार्यान्वयन-निर्भर) पर निर्भर करता है।


1
खैर, यह ध्यान देने योग्य है कि विशिष्ट कार्यान्वयन व्यवहार "मशीन की चौड़ाई" के लिए उपयोग कर रहा है int। लेकिन limits.hबाहर में मदद करता है क्या सटीक सच है पता लगाने के लिए
junix

3
लेकिन वास्तव में, मुझे नहीं लगता कि 32 के लिए एक सी संकलक कभी 32 बिट के रूप में int के बिना बनाया गया है। मानक एक सामान्य प्रकृति के संकलक कार्यान्वयन की अनुमति दे सकता है, लेकिन किसी कारण से, कोई भी एक नैतिक संकलक नहीं बनाना चाहता है। प्रवृत्ति सी उपयोगी बनाने के लिए है।
लुंडिन


4

दरअसल के टुकड़े में आकार int, short, long संकलक कार्यान्वयन पर निर्भर करता है।

उदाहरण के लिए मेरी उबंटू 64 पर थोड़ा मेरे पास shortमें 32, बिट्स एक और एक 32 बिट Ubuntu संस्करण पर यह तब होता है जब 16बिट।


1

C श्रेणी में __int32 के लिए –2147483648 से 2147483647 है। पूरी श्रृंखला के लिए यहां देखें।

unsigned short 0 to 65535
signed short 32768 to 32767
unsigned long 0 to 4294967295
signed long 2147483648 to 2147483647

इस बात की कोई गारंटी नहीं है कि एक 'int' 32 बिट्स का होगा, यदि आप किसी विशिष्ट आकार के चर का उपयोग करना चाहते हैं, खासकर जब कोड लिखना जिसमें बिट जोड़तोड़ शामिल हैं, तो आपको 'मानक पूर्णांक प्रकार' का उपयोग करना चाहिए।

जावा में

इंट डेटा प्रकार एक 32-बिट हस्ताक्षरित दो के पूरक पूर्णांक है। इसका न्यूनतम मूल्य -2,147,483,648 और अधिकतम मूल्य 2,147,483,647 (समावेशी) है।


2
सी के लिए आपके द्वारा उद्धृत मूल्य केवल न्यूनतम सीमाएँ हैं।
ओलिवर चार्ल्सवर्थ

यदि न्यूनतम से अधिकतम तक @OliCharlesworth रेंज।
अचिन्त्य झा

6
मेरे कहने का मतलब यह है कि प्रत्येक प्रकार की सीमा को आपके द्वारा ऊपर उद्धृत किए जाने से बड़ा होने की अनुमति है।
ओलिवर चार्ल्सवर्थ

3
C में कुछ भी नहीं है जिसे __int32 कहा जाता है। Microsoft के पास सी कंपाइलर का कोई कड़ाई से अनुपालन नहीं है, इसलिए कौन परवाह करता है कि उनका गैर-सी कंपाइलर कैसे काम करता है? एकमात्र प्रासंगिक स्रोत ISO9899 है, या तो 5.2.4.2.1 "पूर्णांक प्रकारों के आकार" या 7.20.2.1 "सटीक-चौड़ाई पूर्णांक प्रकारों की सीमाएं"। जिनमें से कोई भी Microsoft goo के साथ संगत नहीं है।
लुंडिन

2
C99 मानक में int32_t, int16_t, आदि जोड़ता है। Microsoft के अतिरिक्त 100% संगत नहीं हैं, लेकिन वे इसी तरह से काम करते हैं।
मोनिका

1

यह वास्तव में समझने के लिए वास्तव में सरल है, आप इसे Google कैलकुलेटर के साथ भी गणना कर सकते हैं: आपके पास एक इंट के लिए 32 बिट्स हैं और कंप्यूटर बाइनरी हैं, इसलिए आपके पास प्रति बिट (स्पॉट) 2 मान हो सकते हैं। यदि आप 2 ^ 32 की गणना करते हैं, तो आपको 4,294,967,296 मिलेंगे। इसलिए यदि आप इस संख्या को 2 से विभाजित करते हैं, (क्योंकि उनमें से आधे नकारात्मक पूर्णांक हैं और अन्य आधे सकारात्मक हैं), तो आपको 2,147,483,648 मिलते हैं। और यह संख्या 32 बिट्स द्वारा दर्शाई जा सकने वाली सबसे बड़ी इंट है, हालाँकि यदि आप ध्यान दें तो आप ध्यान देंगे कि 2,147,483,648 1 से 2,147,483,647 से अधिक है, ऐसा इसलिए है क्योंकि संख्याओं में से एक का प्रतिनिधित्व करता है जो दुर्भाग्य से 2 ^ में सही है 32 एक विषम संख्या नहीं है, इसलिए आपके पास बीच में केवल एक संख्या नहीं है, इसलिए कब्जे वाले पूर्णांक में एक कम सिफर है, जबकि नकारात्मक को पूरा आधा 2,147,483,648 मिलता है।

और बस। यह मशीन पर निर्भर करता है न कि भाषा पर।


2
यह वह नहीं है जो उसने पूछा ... सवाल यह है कि "सी इंट जावा इंट से अलग क्यों है?"
इलेक्ट्रॉनवैल

और जावा में, आकार मशीन पर निर्भर int नहीं करता है। int== 32-बिट पर हस्ताक्षर किए, दो-पूरक को जावा भाषा विनिर्देश द्वारा परिभाषित किया गया है, और एनोडाइज्ड अनसैटेशियम की शीट पर उत्कीर्ण किया गया है । (ठीक है, शायद अंतिम बिट नहीं।)
स्टीफन सी

-1

मानक C में, आप INT_MAX को अधिकतम 'int' मान के रूप में उपयोग कर सकते हैं, इस स्थिरांक को "limit.h" में परिभाषित किया जाना चाहिए। इसी प्रकार की स्थिरांक अन्य प्रकारों के लिए परिभाषित की जाती हैं ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ), जैसा कि कहा गया है, ये स्थिरांक कार्यान्वयन-निर्भर हैं, लेकिन न्यूनतम बिट्स के अनुसार न्यूनतम मूल्य हैं प्रत्येक प्रकार के लिए, जैसा कि मानक में निर्दिष्ट है।


5
यह वास्तव में ओपी के प्रश्न को संबोधित करने के आसपास नहीं है। इसके अलावा, उत्तर के मुख्य भाग वास्तव में किसी अन्य साइट पर दफन नहीं किए जाने चाहिए।
ब्रैड कोच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.