Int16, Int32 और Int64 में क्या अंतर है?


जवाबों:


348

प्रत्येक प्रकार के पूर्णांक में भंडारण क्षमता की एक अलग सीमा होती है

   Type      Capacity

   Int16 -- (-32,768 to +32,767)

   Int32 -- (-2,147,483,648 to +2,147,483,647)

   Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)

जैसा कि जेम्स सदरलैंड ने अपने जवाब में कहा है :

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

परिणामी कोड समान होगा: अंतर विशुद्ध रूप से पठनीयता या कोड उपस्थिति में से एक है।


1
यदि आप जानते हैं कि मूल्य 65,535 (हस्ताक्षरित) या 7632,768 से 32,767 (अहस्ताक्षरित) से अधिक नहीं होने वाला है, तो पूर्णांक int16का उपयोग करके मेमोरी रिसोर्स को बचाने के लिए परिभाषित करना बेहतर नहीं होगा , बस उपयोग करने का विरोध किया int?
। ᴍᴀᴛᴛ

8
int और int32 पर्यायवाची हो सकते हैं, लेकिन उनकी आवश्यकता नहीं है। आजकल बेचे जाने वाले अधिकांश सिस्टम 64-बिट हैं, जिस स्थिति में एक इंट 64 बिट्स होगा।
मार्टिज़न ओटो

4
मैथ्यू टी। बेकर और खुद के जैसे किसी अन्य व्यक्ति के लिए, जो यह तय करने की कोशिश कर रहे थे कि एक प्रदर्शन के दृष्टिकोण से किसका उपयोग करना है, आपको इस पोस्ट की जांच करनी चाहिए जो बताती है कि इंटगर कई मामलों में Int16 से अधिक कुशल है: stackoverflow.com/questions/129023/ net-integer-vs-int16
टोनी एल।

19
@MartijnOtto इस सवाल का टैग C # है। सी # में, intहै हमेशा Int32 , प्रणाली की परवाह किए बिना। शायद आप सी ++ के बारे में सोच रहे हैं?

9
@MattBaker: सामान्य तौर पर, आधुनिक कंप्यूटरों में, एक int16 एक int32 (और वास्तव में एक int64) के रूप में ज्यादा जगह लेता है, क्योंकि अधिकांश ऑपरेशन कुशल होने के लिए, हम एक्सेस को 32 या 64 बिट की संरेखित करने के लिए डेटा के आसपास पैड करते हैं (क्रमशः 32 या 64 बिट मोड में)। इसका कारण यह है कि कुछ लोगों पर अप्रकाशित पहुंच हास्यास्पद रूप से अक्षम है, और दूसरों पर संभव नहीं है।
जोएल

118

यहाँ केवल वास्तविक अंतर आकार है। यहाँ सभी इंट प्रकार के पूर्णांक मान हैं जिन पर अलग-अलग आकार हैं

  • Int16: 2 बाइट्स
  • Int32और int: 4 बाइट्स
  • Int64 : 8 बाइट्स

Int64बाकी के बीच एक छोटा सा अंतर है । Int64भंडारण स्थान पर 32 बिट प्लेटफ़ॉर्म असाइनमेंट पर परमाणु होने की गारंटी नहीं है। यह अन्य सभी प्रकार के लिए गारंटी है।


अगर मैं का उपयोग Int64में 32 bit Windows Operating Systemतो मुद्दों मैं आ सकता है क्या हैं? क्या कोई उदाहरण है?
शैजुत

70

पूर्णांक

यह C # में परिभाषित एक आदिम डेटा प्रकार है।

इसे FCL प्रकार के Int32 में मैप किया जाता है।

यह एक मान प्रकार है और System.Int32 संरचना का प्रतिनिधित्व करता है।

यह हस्ताक्षरित है और 32 बिट्स लेता है।

इसका न्यूनतम -2147483648 और अधिकतम +2147483647 मूल्य है।

int16

यह एक एफसीएल प्रकार है।

C # में, शॉर्ट को Int16 में मैप किया जाता है।

यह एक मान प्रकार है और System.Int16 संरचना का प्रतिनिधित्व करता है।

यह हस्ताक्षरित है और 16 बिट्स लेता है।

इसका न्यूनतम -32768 और अधिकतम +32767 मूल्य है।

int32

यह एक एफसीएल प्रकार है।

C # में, int को Int32 में मैप किया जाता है।

यह एक मान प्रकार है और System.Int32 संरचना का प्रतिनिधित्व करता है।

यह हस्ताक्षरित है और 32 बिट्स लेता है।

इसका न्यूनतम -2147483648 और अधिकतम +2147483647 मूल्य है।

Int64

यह एक एफसीएल प्रकार है।

C # में, लंबे समय से Int64 में मैप किया जाता है।

यह एक मान प्रकार है और System.Int64 संरचना का प्रतिनिधित्व करता है।

यह हस्ताक्षरित है और 64 बिट्स लेता है।

इसमें न्यूनतम -9,223,372,036,854,775,808 और अधिकतम 9,223,372,036,854,775,807 मूल्य हैं।


बस जोड़ने के लिए कि Int64डेटा प्रकार का उपयोग किया जा सकता है Lया lप्रत्यय जबकि Int16या Int32सी # में प्रत्यय नहीं है।
आरबीटी

14

जेफरी रिक्टर (.NET फ्रेमवर्क डेवलपमेंट के योगदानकर्ताओं में से एक के अनुसार) की पुस्तक 'सीएलआर बाय सी #':

int C # संकलक द्वारा अनुमत एक आदिम प्रकार है, जबकि Int32 फ्रेमवर्क क्लास लाइब्रेरी प्रकार (सीएलएस द्वारा पालन की जाने वाली भाषाओं में उपलब्ध) है। वास्तव में, int संकलन के दौरान Int32 में अनुवाद करता है।

इसके अलावा,

C # में, System.Int64 के लिए लंबे नक्शे, लेकिन एक अलग प्रोग्रामिंग भाषा में, लंबे समय तक Int16 या Int32 में मैप किया जा सकता है। वास्तव में, C ++ / CLI Int32 के रूप में लंबे समय तक इलाज करता है।

वास्तव में, अधिकांश (.NET) भाषाएं लंबे समय तक एक कीवर्ड के रूप में व्यवहार नहीं करेंगी और कोड का उपयोग नहीं करेंगी जो इसका उपयोग करता है।

मैंने इस लेखक को देखा है, और मुख्य रूप से इस तरह की अंतर-विषयक चिंताओं पर, मुख्य रूप से भाषा-विशिष्ट आदिम प्रकार (यानी, int) के लिए FCL प्रकार (यानी, Int32) को पसंद करते हुए .NET पर कई मानक साहित्य।


8

कुछ भी तो नहीं। प्रकार के बीच एकमात्र अंतर है उनके आकार (और, इसलिए, मानों की श्रेणी वे प्रतिनिधित्व कर सकते हैं)।


8

16, 32 और 64 प्रकारों पर एक बहुत ही महत्वपूर्ण नोट:

यदि आप यह क्वेरी चलाते हैं ... Array.IndexOf (नई Int16 [] {1,2,3}, 1)

आपको लगता है कि आप शून्य (0) प्राप्त कर रहे हैं, क्योंकि आप पूछ रहे हैं ... 1 1, 2 या 3 के सरणी में है। यदि आपको उत्तर के रूप में -1 मिलता है, तो इसका मतलब है कि 1 1, 2 या 3 के सरणी में नहीं है। ।

अच्छी तरह से देखें कि मुझे क्या मिला: सभी को आपको 0 देना चाहिए और -1 नहीं (मैंने इसे सभी फ्रेमवर्क संस्करणों 2.0, 3.0, 3.5, 4.0 में परीक्षण किया है)

सी#:

Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)

VB.NET:

Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)

तो मेरी बात, Array.IndexOf तुलना के लिए, केवल Int32 पर भरोसा है!


7
यह स्पष्ट करने के लिए कि पहला उदाहरण इस तरह क्यों काम करता है: पहला शाब्दिक 1, 2, और 3 को संक्षेप shortमें उन्हें सरणी में फिट करने के लिए डाला जाता है, जबकि दूसरा शाब्दिक 1 एक साधारण के रूप में छोड़ दिया जाता है int(int)1बराबर नहीं माना जाता है करने के लिए (short)1, (short)2, (short)3, इस प्रकार परिणाम है -1।

4
C # संस्करणों के लिए एक समान समायोजन उपलब्ध होगा, लेकिन FYI करें एक सरल प्रकार निर्दिष्ट इस समस्या को हल करता है: Array.IndexOf(new Int16(){1,2,3}, 1S) Array.IndexOf(new Int32(){1,2,3}, 1I) Array.IndexOf(new Int64(){1,2,3}, 1L)अपेक्षा के अनुरूप सभी कार्य।
मार्क हर्ड

1
और जो काम नहीं करते हैं उन्होंने Object[],Objectअधिभार का उपयोग किया है । सी # परोक्ष बढ़ा रहा है intएक करने के लिए longजब जरूरत (और यह भी एक को जन्म देती है shortएक करने के लिए intया long), लेकिन परोक्ष का उपयोग कर नीचे डाली नहीं होगा, objectबजाय अधिभार। Option Strict Onया OffVB के साथ केवल टाइप किए गए अधिभार का उपयोग करेंगे जब समान प्रकार प्रदान किए जाएंगे, अन्यथा यह objectअधिभार का उपयोग करता है ।
मार्क हर्ड

आपका जवाब भ्रामक है। कोड विभिन्न प्रकारों के मूल्यों की तुलना कर रहा है। निष्कर्ष for Array.IndexOf comparisons, only trust Int32!गलत है। यदि आप अंतिम 1तर्क को इसी ऐरे प्रकार पर कास्ट करते हैं , तो यह अपेक्षित रूप से काम करता है।
डॉन चेडल

यह एक बहुत ही रोचक और अप्रत्याशित व्यवहार है (चूंकि इंट टू लॉन्ग वर्क लेकिन शॉर्ट टू इंट नहीं) इसलिए अपवोट!
sth_Weird

7

संपादित करें: यह C # के लिए बिल्कुल सही नहीं है, एक टैग जो मुझे याद है जब मैंने इस प्रश्न का उत्तर दिया था - यदि कोई अधिक C # विशिष्ट उत्तर है, तो इसके बजाय कृपया वोट करें!


वे सभी अलग-अलग आकार के पूर्णांक संख्याओं का प्रतिनिधित्व करते हैं।

हालाँकि, बहुत छोटा अंतर है।

int16, int32 और int64 सभी का एक निश्चित आकार है।

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


1
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह केवल वही है जो वास्तव में सही है
एमजे

2
नहीं, यह C # के लिए सही नहीं है। एसी # इंट का आकार हमेशा 32 बिट होता है। सी के लिए, हाँ आपको इस जटिलता से निपटना था और चर अंतरंग आकारों से निपटने के लिए आप अक्सर सी कोड में मैक्रोज़ देखते हैं। देखें ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf पृष्ठ 18.
Ananke

@ अननके आह, सी # टैग छूट गया। काश मैं जवाब पर कुछ वोटों को वापस कर सकता था .....
mjs

6
  1. intऔर int32एक ही हैं (32-बिट पूर्णांक)
  2. int16 छोटा int है (2 बाइट्स या 16-बिट्स)
  3. int64 लंबा डेटाटाइप (8 बाइट्स या 64-बिट्स) है

2
int 32 बिट्स होने की गारंटी नहीं है।
एमजे

8
@ एमजेएस, यह केवल सच नहीं है। C # में, के intलिए एक उपनाम है Int32और इस प्रकार हमेशा 32 बिट होने की गारंटी है।
डेविड अरनो

दरअसल जो एमजे कहता है वह सही है, INT का मतलब सिस्टम x86 या x64 पर आधारित पूर्णांक है, इसलिए यदि आपका सिस्टम x64 है, तो int Int64 होगा, इसलिए 32 होने की गारंटी नहीं है। यदि आप x 64 में int32 डालते हैं तो हमेशा int32 होगा ।
योगर्टु

5
नहीं, डेविड अर्नो जो कहते हैं, वह सही है। C # भाषा विशेष रूप से 'int' को एक 32-बिट पूर्णांक (Int32) से परिभाषित करती है। अन्य भाषाएँ (C / C ++, आदि) निर्दिष्ट नहीं कर सकती हैं, लेकिन इस प्रश्न को 'C #' टैग किया गया है।
थियो ब्रिंकमैन

@ TheoBrinkman सही, यहाँ पर Microsoft का C # इंटीग्रल न्यूमेरिक टाइप्स का पेज है: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Max

5

वे दोनों वास्तव में पर्यायवाची हैं, हालाँकि मैंने उनके बीच छोटे अंतर को पाया,

1) आप Int32बनाते समय उपयोग नहीं कर सकतेenum

enum Test : Int32
{ XXX = 1   // gives you compilation error
}

enum Test : int
{ XXX = 1   // Works fine
}

2) Int32सिस्टम घोषणा के तहत आता है। यदि आप हटाते using.Systemहैं तो आपको संकलन त्रुटि मिलेगी लेकिन इसके मामले में नहींint


-8

Int = Int32 -> मूल लंबा प्रकार

Int16 -> मूल int

Int64 -> 64 बिट सिस्टम के बाद नए डेटा प्रकार उपलब्ध हो जाते हैं

"int" केवल पश्चगामी संगतता के लिए उपलब्ध है। हमें अपने कार्यक्रमों को अधिक सटीक बनाने के लिए वास्तव में नए int प्रकारों का उपयोग करना चाहिए।

---------------

एक और बात जिस पर मैंने गौर किया कि IntInt16, Int32 और Int64 जैसी कोई क्लास नहीं है । TryParseपूर्णांक के लिए सभी सहायक कार्य आते हैं Int32.TryParse

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.