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

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

मान और प्रतिनिधित्व
अभिन्न प्रकार वाले किसी वस्तु का मान वह गणितीय पूर्णांक है जिससे वह मेल खाता है। अभिन्न प्रकार अहस्ताक्षरित (केवल गैर-ऋणात्मक पूर्णांकों का प्रतिनिधित्व करने में सक्षम) या हस्ताक्षरित (ऋणात्मक पूर्णांकों का प्रतिनिधित्व करने में सक्षम) हो सकते हैं।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

यह भी देखें

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