पूर्णांक (कंप्यूटर विज्ञान)

कंप्यूटर विज्ञान में, एक पूर्णांक अभिन्न आंकड़े प्रकार का एक डेटा है, एक डेटा प्रकार जो गणितीय पूर्णांकों के कुछ अंतराल (गणित) का प्रतिनिधित्व करता है। इंटीग्रल डेटा प्रकार विभिन्न आकारों के हो सकते हैं और नकारात्मक मान रखने की अनुमति हो भी सकती है और नहीं भी। पूर्णांकों को आमतौर पर कंप्यूटर में बाइनरी अंकों (बिट्स) के समूह के रूप में दर्शाया जाता है। समूहीकरण का आकार भिन्न होता है इसलिए उपलब्ध पूर्णांक आकारों का सेट विभिन्न प्रकार के कंप्यूटरों के बीच भिन्न होता है। कंप्यूटर हार्डवेयर लगभग हमेशा एक पूर्णांक के रूप में एक प्रोसेसर शब्द आकार या मेमोरी एड्रेस का प्रतिनिधित्व करने का एक तरीका प्रदान करता है।

मूल्य और प्रतिनिधित्व
अभिन्न प्रकार वाले किसी आइटम का मान वह गणितीय पूर्णांक है जिससे वह मेल खाता है। अभिन्न प्रकार अहस्ताक्षरित हो सकते हैं (केवल गैर-नकारात्मक पूर्णांकों का प्रतिनिधित्व करने में सक्षम) या हस्ताक्षरित (ऋणात्मक पूर्णांकों का प्रतिनिधित्व करने में सक्षम)। एक पूर्णांक मान आमतौर पर एक प्रोग्राम के स्रोत कोड में अंकों के अनुक्रम के रूप में वैकल्पिक रूप से + या - के साथ उपसर्ग के रूप में निर्दिष्ट किया जाता है। कुछ प्रोग्रामिंग लैंग्वेज अन्य नोटेशन की अनुमति देती हैं, जैसे हेक्साडेसिमल (बेस 16) या ऑक्टल (बेस 8)। कुछ प्रोग्रामिंग लैंग्वेज अंक समूह विभाजक्स को भी अनुमति देती हैं। इस डेटाम का आंतरिक प्रतिनिधित्व कंप्यूटर की मेमोरी में मान को संग्रहीत करने का तरीका है। गणितीय पूर्णांकों के विपरीत, कंप्यूटर में एक विशिष्ट डेटाम का कुछ न्यूनतम और अधिकतम संभव मान होता है।

द्विआधारी अंक प्रणाली का उपयोग करते हुए, एक सकारात्मक पूर्णांक का सबसे आम प्रतिनिधित्व अंश्स की एक स्ट्रिंग है। बिट्स को संग्रहीत करने वाली मेमोरी बाइट्स का क्रम भिन्न होता है; endianness देखें। एक अभिन्न प्रकार की चौड़ाई या सटीकता इसके प्रतिनिधित्व में बिट्स की संख्या है। एन बिट्स के साथ एक अभिन्न प्रकार 2 को सांकेतिक शब्दों में बदल सकता हैn संख्याएं; उदाहरण के लिए एक अहस्ताक्षरित प्रकार आमतौर पर गैर-नकारात्मक मान 0 से 2 का प्रतिनिधित्व करता हैएन−1. बिट पैटर्न के पूर्णांक मानों के अन्य एन्कोडिंग कभी-कभी उपयोग किए जाते हैं, उदाहरण के लिए बाइनरी-कोडित दशमलव या ग्रे कोड, या मुद्रित वर्ण कोड जैसे ASCII।

बाइनरी कंप्यूटिंग सिस्टम में चार प्रसिद्ध हस्ताक्षरित संख्या प्रतिनिधित्व हैं। सबसे आम दो का पूरक है, जो एन बिट्स के साथ एक हस्ताक्षरित अभिन्न प्रकार को -2 से संख्याओं का प्रतिनिधित्व करने की अनुमति देता है(n−1) से 2 तक(n−1)−1. दो का पूरक अंकगणित सुविधाजनक है क्योंकि एक पूर्ण आक्षेप है | निरूपण और मूल्यों के बीच एक-से-एक पत्राचार (विशेष रूप से, कोई अलग +0 और -0 नहीं), और क्योंकि जोड़, घटाव और गुणा को हस्ताक्षरित और के बीच अंतर करने की आवश्यकता नहीं है अहस्ताक्षरित प्रकार। अन्य संभावनाओं में ऑफसेट बाइनरी, साइन-परिमाण और लोगों का पूरक शामिल हैं।

कुछ कंप्यूटर भाषाएँ पूर्णांक आकार को मशीन-स्वतंत्र तरीके से परिभाषित करती हैं; अंतर्निहित प्रोसेसर शब्द आकार के आधार पर दूसरों की अलग-अलग परिभाषाएँ हैं। सभी भाषा कार्यान्वयन सभी पूर्णांक आकारों के चर को परिभाषित नहीं करते हैं, और परिभाषित आकार किसी विशेष कार्यान्वयन में भिन्न भी नहीं हो सकते हैं। एक प्रोग्रामिंग भाषा में एक पूर्णांक एक अलग भाषा में या एक अलग प्रोसेसर पर एक अलग आकार का हो सकता है।

कुछ दशमलव कंप्यूटर पूर्णांकों के दशमलव निरूपण का उपयोग करते हैं, जो बाइनरी-कोडेड दशमलव | बाइनरी-कोडेड दशमलव (BCD) या अन्य प्रारूप में संग्रहीत होते हैं। इन मानों के लिए आमतौर पर 4 बिट्स प्रति दशमलव अंक (कभी-कभी कुतरना कहा जाता है) के डेटा आकार की आवश्यकता होती है, आमतौर पर एक संकेत के लिए अतिरिक्त बिट्स के साथ। कई आधुनिक सीपीयू एक विस्तारित डेटाटाइप के रूप में दशमलव पूर्णांकों के लिए सीमित समर्थन प्रदान करते हैं, ऐसे मानों को बाइनरी मानों में और से परिवर्तित करने के लिए निर्देश प्रदान करते हैं। आर्किटेक्चर के आधार पर, दशमलव पूर्णांकों के निश्चित आकार हो सकते हैं (उदाहरण के लिए, 7 दशमलव अंक और 32-बिट शब्द में फिट होने वाला चिह्न), या चर-लंबाई (कुछ अधिकतम अंकों के आकार तक) हो सकता है, आमतौर पर प्रति बाइट में दो अंक होते हैं। (ओक्टेट)।

सामान्य अभिन्न डेटा प्रकार
विभिन्न सेंट्रल प्रोसेसिंग यूनिट विभिन्न अभिन्न डेटा प्रकारों का समर्थन करते हैं। आमतौर पर, हार्डवेयर हस्ताक्षरित और अहस्ताक्षरित दोनों प्रकारों का समर्थन करेगा, लेकिन चौड़ाई का केवल एक छोटा, निश्चित सेट।

ऊपर दी गई तालिका अभिन्न प्रकार की चौड़ाई सूचीबद्ध करती है जो सामान्य प्रोसेसर द्वारा हार्डवेयर में समर्थित हैं। उच्च स्तरीय प्रोग्रामिंग भाषाएं अधिक संभावनाएं प्रदान करती हैं। एक 'डबल विड्थ' इंटीग्रल टाइप का होना आम बात है जिसमें सबसे बड़े हार्डवेयर-समर्थित टाइप के मुकाबले दोगुने बिट होते हैं। कई भाषाओं में बिट-फ़ील्ड प्रकार भी होते हैं (बिट्स की एक निर्दिष्ट संख्या, आमतौर पर अधिकतम हार्डवेयर-समर्थित चौड़ाई से कम होने के लिए विवश) और श्रेणी प्रकार (जो निर्दिष्ट सीमा में केवल पूर्णांकों का प्रतिनिधित्व कर सकते हैं)।

लिस्प प्रोग्रामिंग भाषा, स्मॉलटाक, रेक्स, हास्केल (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), और राकू (प्रोग्रामिंग भाषा) जैसी कुछ भाषाएं मनमाना सटीक पूर्णांक (जिसे अनंत सटीक पूर्णांक या bignum भी कहा जाता है) का समर्थन करती हैं। अन्य भाषाएँ जो इस अवधारणा को एक शीर्ष-स्तरीय निर्माण के रूप में समर्थन नहीं करती हैं, उनमें छोटे चर के सरणियों का उपयोग करके बहुत बड़ी संख्या का प्रतिनिधित्व करने के लिए पुस्तकालय उपलब्ध हो सकते हैं, जैसे कि जावा का BigInteger क्लास या पर्लbigintपैकेट। ये कंप्यूटर की उतनी ही मेमोरी का उपयोग करते हैं जितनी संख्याओं को संग्रहीत करने के लिए आवश्यक होती है; हालाँकि, एक कंप्यूटर में केवल एक सीमित मात्रा में भंडारण होता है, इसलिए वे भी केवल गणितीय पूर्णांकों के एक सीमित उपसमुच्चय का प्रतिनिधित्व कर सकते हैं। ये योजनाएँ बहुत बड़ी संख्या का समर्थन करती हैं; उदाहरण के लिए एक किलोबाइट मेमोरी का उपयोग 2466 दशमलव अंकों तक की संख्या को स्टोर करने के लिए किया जा सकता है।

एक बूलियन डेटाटाइप या ध्वज (कंप्यूटिंग) प्रकार एक प्रकार है जो केवल दो मानों का प्रतिनिधित्व कर सकता है: 0 और 1, आमतौर पर क्रमशः गलत और सत्य के साथ पहचाना जाता है। इस प्रकार को एक बिट का उपयोग करके स्मृति में संग्रहीत किया जा सकता है, लेकिन अक्सर पता लगाने और पहुंच की गति की सुविधा के लिए इसे पूर्ण बाइट दिया जाता है।

एक चार-बिट मात्रा को निबल (खाते समय, काटने से छोटा होना) या नीबल (शब्द बाइट के रूप में एक वाक्य होना) के रूप में जाना जाता है। एक निबल हेक्साडेसिमल में एक अंक से मेल खाता है और बाइनरी-कोडेड दशमलव में एक अंक या साइन कोड रखता है।

बाइट्स और ऑक्टेट
बाइट शब्द का शुरू में अर्थ था 'स्मृति की सबसे छोटी पता योग्य इकाई'। अतीत में, 5-, 6-, 7-, 8-, और 9-बिट बाइट सभी का उपयोग किया गया है। ऐसे कंप्यूटर भी हैं जो अलग-अलग बिट्स ('बिट-एड्रेस्ड मशीन') को संबोधित कर सकते हैं, या जो केवल 16- या 32-बिट मात्राओं ('वर्ड-एड्रेस्ड मशीन') को संबोधित कर सकते हैं। शब्द बाइट आमतौर पर बिट- और वर्ड-एड्रेसेड मशीनों के संबंध में बिल्कुल भी उपयोग नहीं किया जाता था।

ऑक्टेट शब्द हमेशा 8-बिट मात्रा को संदर्भित करता है। यह ज्यादातर संगणक संजालिंग के क्षेत्र में उपयोग किया जाता है, जहां विभिन्न बाइट चौड़ाई वाले कंप्यूटरों को संचार करना पड़ सकता है।

आधुनिक उपयोग में बाइट का अर्थ लगभग हमेशा आठ बिट्स होता है, क्योंकि अन्य सभी आकार अनुपयोगी हो गए हैं; इस प्रकार बाइट ऑक्टेट का पर्याय बन गया है।

शब्द
'शब्द' शब्द का प्रयोग बिट्स के एक छोटे समूह के लिए किया जाता है जिसे एक विशेष कंप्यूटर आर्किटेक्चर के प्रोसेसर द्वारा एक साथ नियंत्रित किया जाता है। एक शब्द का आकार इस प्रकार सीपीयू-विशिष्ट है। 6-, 8-, 12-, 16-, 18-, 24-, 32-, 36-, 39-, 40-, 48-, 60-, और 64-बिट सहित कई अलग-अलग शब्द आकारों का उपयोग किया गया है। चूंकि यह वास्तुकला है, एक शब्द का आकार आमतौर पर बाद में संगत सीपीयू की विशेषताओं के बजाय परिवार में पहले सीपीयू द्वारा निर्धारित किया जाता है। शब्द से प्राप्त शब्दों के अर्थ, जैसे लॉन्गवर्ड, डबलवर्ड, क्वाडवर्ड और हाफवर्ड, भी सीपीयू और ओएस के साथ भिन्न होते हैं।

व्यावहारिक रूप से सभी नए डेस्कटॉप प्रोसेसर 64-बिट शब्दों का उपयोग करने में सक्षम हैं, हालांकि 8- और 16-बिट शब्द आकार वाले अंतः स्थापित प्रणाली अभी भी आम हैं। कंप्यूटर के शुरुआती दिनों में 36-बिट|36-बिट शब्द की लंबाई आम थी।

सॉफ़्टवेयर की गैर-पोर्टेबिलिटी का एक महत्वपूर्ण कारण यह गलत धारणा है कि सभी कंप्यूटरों में एक ही शब्द का आकार होता है, जैसा कि प्रोग्रामर द्वारा उपयोग किए जाने वाले कंप्यूटर में होता है। उदाहरण के लिए, यदि कोई प्रोग्रामर C भाषा का उपयोग गलत तरीके से घोषित करता है int एक चर जिसका उपयोग 2 से अधिक मानों को संग्रहीत करने के लिए किया जाएगा15−1, 16-बिट पूर्णांक वाले कंप्यूटर पर प्रोग्राम विफल हो जाएगा। उस चर को घोषित किया जाना चाहिए था long, जिसमें किसी भी कंप्यूटर पर कम से कम 32 बिट्स हों। प्रोग्रामर गलत तरीके से यह भी मान सकते हैं कि एक सूचक को सूचना के नुकसान के बिना एक पूर्णांक में परिवर्तित किया जा सकता है, जो 32-बिट कंप्यूटरों पर काम कर सकता है, लेकिन 64-बिट कंप्यूटरों पर 64-बिट पॉइंटर्स और 32-बिट पूर्णांकों के साथ विफल हो सकता है। यह समस्या C99 द्वारा stdint.h के रूप में हल की गई है intptr_t.

लघु पूर्णांक
एक छोटा पूर्णांक एक पूर्ण संख्या का प्रतिनिधित्व कर सकता है जो कम भंडारण ले सकता है, जबकि एक ही मशीन पर एक मानक पूर्णांक की तुलना में एक छोटी सी सीमा होती है।

C (प्रोग्रामिंग लैंग्वेज) में इसे किसके द्वारा निरूपित किया जाता है short. यह कम से कम 16 बिट होना आवश्यक है, और अक्सर एक मानक पूर्णांक से छोटा होता है, लेकिन यह आवश्यक नहीं है। एक अनुरूप कार्यक्रम यह मान सकता है कि यह -(215−1) और 215-1, लेकिन यह नहीं माना जा सकता है कि सीमा बड़ी नहीं है। जावा (प्रोग्रामिंग भाषा) में, a short हमेशा 16-बिट पूर्णांक होता है। विंडोज एपीआई में, डेटाटाइप SHORT सभी मशीनों पर 16-बिट हस्ताक्षरित पूर्णांक के रूप में परिभाषित किया गया है।

लंबा पूर्णांक
एक लंबा पूर्णांक एक पूर्ण पूर्णांक का प्रतिनिधित्व कर सकता है जिसकी सीमा (कंप्यूटर विज्ञान) उसी मशीन पर एक मानक पूर्णांक से अधिक या उसके बराबर है।

C (प्रोग्रामिंग लैंग्वेज) में इसे किसके द्वारा निरूपित किया जाता है long. यह कम से कम 32 बिट होना आवश्यक है, और एक मानक पूर्णांक से बड़ा हो भी सकता है और नहीं भी। एक अनुरूप कार्यक्रम यह मान सकता है कि यह -(231−1) और 231−1, लेकिन यह नहीं माना जा सकता है कि सीमा बड़ी नहीं है।

लंबा लंबा
C (प्रोग्रामिंग भाषा) के C99 संस्करण और C++ के C++11 संस्करण में, a  प्रकार समर्थित है जिसकी मानक की न्यूनतम क्षमता दोगुनी है  । यह प्रकार उन कंपाइलरों द्वारा समर्थित नहीं है जिनके लिए सी कोड को पिछले सी ++ मानक, सी ++ 03 के अनुरूप होना आवश्यक है, क्योंकि long long प्रकार सी ++ 03 में मौजूद नहीं था। एएनएसआई/आईएसओ अनुपालक संकलक के लिए, निर्दिष्ट श्रेणियों के लिए न्यूनतम आवश्यकताएं, अर्थात, −(263−1) 263-1 हस्ताक्षरित के लिए और 0 से 264−1 अहस्ताक्षरित के लिए, पूरा होना चाहिए; हालाँकि, इस सीमा का विस्तार करने की अनुमति है।  प्लेटफ़ॉर्म के बीच कोड और डेटा का आदान-प्रदान करते समय या सीधे हार्डवेयर एक्सेस करते समय यह एक समस्या हो सकती है। इस प्रकार, प्लेटफ़ॉर्म स्वतंत्र सटीक चौड़ाई प्रकार प्रदान करने वाले हेडर के कई सेट हैं। सी मानक पुस्तकालय प्रदान करता है stdint.h; इसे C99 और C++11 में पेश किया गया था।

सिंटेक्स
पूर्णांकों के लिए शाब्दिक को नियमित अरबी अंकों के रूप में लिखा जा सकता है, जिसमें अंकों का एक क्रम होता है और मूल्य से पहले एक हाइफन-ऋण द्वारा इंगित निषेध होता है। हालाँकि, अधिकांश प्रोग्रामिंग भाषाएँ अंक समूहीकरण के लिए अल्पविराम या रिक्त स्थान के उपयोग की अनुमति नहीं देती हैं। पूर्णांक शाब्दिक के उदाहरण हैं:

कई प्रोग्रामिंग भाषाओं में पूर्णांक शाब्दिक लिखने के लिए कई वैकल्पिक विधियाँ हैं:


 * अधिकांश प्रोग्रामिंग लैंग्वेज, विशेष रूप से सी (प्रोग्रामिंग लैंग्वेज) से प्रभावित, एक पूर्णांक शाब्दिक के साथ उपसर्ग करते हैं  या   एक हेक्साडेसिमल मान का प्रतिनिधित्व करने के लिए, उदा।  . अन्य भाषाएँ भिन्न अंकन का उपयोग कर सकती हैं, उदा. कुछ असेंबली भाषाएं संलग्न होती हैं   या   एक हेक्साडेसिमल मान के अंत तक।
 * पर्ल, रूबी (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग लैंग्वेज), जूलिया (प्रोग्रामिंग भाषा), डी (प्रोग्रामिंग भाषा), जाओ (प्रोग्रामिंग भाषा), जंग (प्रोग्रामिंग भाषा) और पायथन (प्रोग्रामिंग लैंग्वेज) (संस्करण 3.6 से शुरू) स्पष्टता के लिए एम्बेडेड बल देना की अनुमति दें, उदा।, और फिक्स्ड-फॉर्म फोरट्रान पूर्णांक अक्षर में एम्बेडेड रिक्त स्थान को अनदेखा करता है। C (C2x से शुरू) और C++ इस उद्देश्य के लिए सिंगल कोट्स का उपयोग करते हैं।
 * C (प्रोग्रामिंग लैंग्वेज) और C++ में, एक अग्रणी शून्य एक अष्टभुजाकार मान को इंगित करता है, उदा। . यह मुख्य रूप से मोड (यूनिक्स) के साथ प्रयोग करने के लिए अभिप्रेत था; हालाँकि, इसकी आलोचना की गई है क्योंकि सामान्य पूर्णांक भी शून्य के साथ नेतृत्व कर सकते हैं। जैसे, पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग लैंग्वेज), हास्केल (प्रोग्रामिंग लैंग्वेज), और OCaml प्रीफिक्स ऑक्टल वैल्यू के साथ   या , हेक्साडेसिमल मानों द्वारा उपयोग किए गए लेआउट के बाद।
 * जावा (प्रोग्रामिंग लैंग्वेज), सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी #, स्काला (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग लैंग्वेज), OCaml, C (C23 से शुरू) और C ++ सहित कई भाषाएँ प्रतिनिधित्व कर सकती हैं किसी संख्या के साथ प्रीफ़िक्स लगाकर बाइनरी मान  या.

यह भी देखें

 * मनमाना-सटीक अंकगणित
 * बाइनरी-कोडेड दशमलव (बीसीडी)
 * सी डेटा प्रकार
 * पूर्णांक अतिप्रवाह
 * हस्ताक्षरित संख्या प्रतिनिधित्व