बीच क्या अंतर है int, System.Int16, System.Int32और System.Int64उनके आकार के अलावा अन्य?
बीच क्या अंतर है int, System.Int16, System.Int32और System.Int64उनके आकार के अलावा अन्य?
जवाबों:
प्रत्येक प्रकार के पूर्णांक में भंडारण क्षमता की एक अलग सीमा होती है
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उसी तरह से बदलते चर को ध्यान में रखना चाहिए। ।परिणामी कोड समान होगा: अंतर विशुद्ध रूप से पठनीयता या कोड उपस्थिति में से एक है।
intहै हमेशा Int32 , प्रणाली की परवाह किए बिना। शायद आप सी ++ के बारे में सोच रहे हैं?
यहाँ केवल वास्तविक अंतर आकार है। यहाँ सभी इंट प्रकार के पूर्णांक मान हैं जिन पर अलग-अलग आकार हैं
Int16: 2 बाइट्सInt32और int: 4 बाइट्सInt64 : 8 बाइट्सInt64बाकी के बीच एक छोटा सा अंतर है । Int64भंडारण स्थान पर 32 बिट प्लेटफ़ॉर्म असाइनमेंट पर परमाणु होने की गारंटी नहीं है। यह अन्य सभी प्रकार के लिए गारंटी है।
Int64में 32 bit Windows Operating Systemतो मुद्दों मैं आ सकता है क्या हैं? क्या कोई उदाहरण है?
पूर्णांक
यह 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सी # में प्रत्यय नहीं है।
जेफरी रिक्टर (.NET फ्रेमवर्क डेवलपमेंट के योगदानकर्ताओं में से एक के अनुसार) की पुस्तक 'सीएलआर बाय सी #':
int C # संकलक द्वारा अनुमत एक आदिम प्रकार है, जबकि Int32 फ्रेमवर्क क्लास लाइब्रेरी प्रकार (सीएलएस द्वारा पालन की जाने वाली भाषाओं में उपलब्ध) है। वास्तव में, int संकलन के दौरान Int32 में अनुवाद करता है।
इसके अलावा,
C # में, System.Int64 के लिए लंबे नक्शे, लेकिन एक अलग प्रोग्रामिंग भाषा में, लंबे समय तक Int16 या Int32 में मैप किया जा सकता है। वास्तव में, C ++ / CLI Int32 के रूप में लंबे समय तक इलाज करता है।
वास्तव में, अधिकांश (.NET) भाषाएं लंबे समय तक एक कीवर्ड के रूप में व्यवहार नहीं करेंगी और कोड का उपयोग नहीं करेंगी जो इसका उपयोग करता है।
मैंने इस लेखक को देखा है, और मुख्य रूप से इस तरह की अंतर-विषयक चिंताओं पर, मुख्य रूप से भाषा-विशिष्ट आदिम प्रकार (यानी, int) के लिए FCL प्रकार (यानी, Int32) को पसंद करते हुए .NET पर कई मानक साहित्य।
कुछ भी तो नहीं। प्रकार के बीच एकमात्र अंतर है उनके आकार (और, इसलिए, मानों की श्रेणी वे प्रतिनिधित्व कर सकते हैं)।
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 पर भरोसा है!
shortमें उन्हें सरणी में फिट करने के लिए डाला जाता है, जबकि दूसरा शाब्दिक 1 एक साधारण के रूप में छोड़ दिया जाता है int। (int)1बराबर नहीं माना जाता है करने के लिए (short)1, (short)2, (short)3, इस प्रकार परिणाम है -1।
Array.IndexOf(new Int16(){1,2,3}, 1S) Array.IndexOf(new Int32(){1,2,3}, 1I) Array.IndexOf(new Int64(){1,2,3}, 1L)अपेक्षा के अनुरूप सभी कार्य।
Object[],Objectअधिभार का उपयोग किया है । सी # परोक्ष बढ़ा रहा है intएक करने के लिए longजब जरूरत (और यह भी एक को जन्म देती है shortएक करने के लिए intया long), लेकिन परोक्ष का उपयोग कर नीचे डाली नहीं होगा, objectबजाय अधिभार। Option Strict Onया OffVB के साथ केवल टाइप किए गए अधिभार का उपयोग करेंगे जब समान प्रकार प्रदान किए जाएंगे, अन्यथा यह objectअधिभार का उपयोग करता है ।
for Array.IndexOf comparisons, only trust Int32!गलत है। यदि आप अंतिम 1तर्क को इसी ऐरे प्रकार पर कास्ट करते हैं , तो यह अपेक्षित रूप से काम करता है।
संपादित करें: यह C # के लिए बिल्कुल सही नहीं है, एक टैग जो मुझे याद है जब मैंने इस प्रश्न का उत्तर दिया था - यदि कोई अधिक C # विशिष्ट उत्तर है, तो इसके बजाय कृपया वोट करें!
वे सभी अलग-अलग आकार के पूर्णांक संख्याओं का प्रतिनिधित्व करते हैं।
हालाँकि, बहुत छोटा अंतर है।
int16, int32 और int64 सभी का एक निश्चित आकार है।
एक इंट का आकार उस वास्तुकला पर निर्भर करता है जिसे आप के लिए संकलित कर रहे हैं - सी कल्पना केवल एक इंट को बड़े या बराबर के रूप में परिभाषित करती है हालांकि व्यवहार में यह आपके द्वारा लक्षित प्रोसेसर की चौड़ाई है, जो शायद 32 बिट है, लेकिन आपको पता होना चाहिए यह नहीं हो सकता है।
intऔर int32एक ही हैं (32-बिट पूर्णांक)int16 छोटा int है (2 बाइट्स या 16-बिट्स)int64 लंबा डेटाटाइप (8 बाइट्स या 64-बिट्स) हैintलिए एक उपनाम है Int32और इस प्रकार हमेशा 32 बिट होने की गारंटी है।
वे दोनों वास्तव में पर्यायवाची हैं, हालाँकि मैंने उनके बीच छोटे अंतर को पाया,
1) आप Int32बनाते समय उपयोग नहीं कर सकतेenum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32सिस्टम घोषणा के तहत आता है। यदि आप हटाते using.Systemहैं तो आपको संकलन त्रुटि मिलेगी लेकिन इसके मामले में नहींint
Int = Int32 -> मूल लंबा प्रकार
Int16 -> मूल int
Int64 -> 64 बिट सिस्टम के बाद नए डेटा प्रकार उपलब्ध हो जाते हैं
"int" केवल पश्चगामी संगतता के लिए उपलब्ध है। हमें अपने कार्यक्रमों को अधिक सटीक बनाने के लिए वास्तव में नए int प्रकारों का उपयोग करना चाहिए।
---------------
एक और बात जिस पर मैंने गौर किया कि IntInt16, Int32 और Int64 जैसी कोई क्लास नहीं है । TryParseपूर्णांक के लिए सभी सहायक कार्य आते हैं Int32.TryParse।
int16का उपयोग करके मेमोरी रिसोर्स को बचाने के लिए परिभाषित करना बेहतर नहीं होगा , बस उपयोग करने का विरोध कियाint?