2008-11-06 11 views
8

मुझे अक्सर एक पुनः प्राप्त मूल्य (आमतौर पर एक स्ट्रिंग के रूप में) को परिवर्तित करना होता है - और उसके बाद इसे एक int में परिवर्तित करना होता है। लेकिन सी # (.Net) में आपको int16, int32 या int64 चुनना होगा - आप कैसे जानते हैं कि कौन सा चयन करना है जब आप नहीं जानते कि आपका पुनर्प्राप्त नंबर कितना बड़ा होगा?int16, int32, int64 में कनवर्ट करना - आप कैसे जानते हैं कि कौन सा चयन करना है?

+0

अगर आपको ऋणात्मक संख्या की आवश्यकता नहीं है, तो भूलें, सी # ने बिना हस्ताक्षर किए इन्ट्स (uint32, uint64) भी हैं। – Powerlord

उत्तर

20

यहां हर कोई जिसने उल्लेख किया है कि इंटेल 16 को घोषित करता है, उसे कम करना चाहिए।

आपके प्रश्न का उत्तर कीवर्ड "int" (या यदि आपको ऐसा लगता है, "Int32" का उपयोग करना है) का उपयोग करना है।

है कि आप अप करने के लिए 2.4 अरब संख्या की श्रेणी देता है ... इसके अलावा, 32bit प्रोसेसर उन ints बेहतर (और सबसे महत्वपूर्ण कारण) संभाल लेंगे ... भी है कि आप के लिए है कि पूर्णांक के प्रयोग पर योजना बना रहे हैं लगभग किसी भी कारण ... यह संभवतः एक "int" (Int32) होने की आवश्यकता होगी।

नेट फ्रेमवर्क में, 99.9 99% संख्यात्मक फ़ील्ड (जो पूरी संख्या हैं) "इनट्स" (Int32) हैं।

उदाहरण: ऐरे। लम्बाई, प्रक्रिया.आईडी, विंडोज़ विड्थ, बटन। हाइट, आदि, आदि 1 मिलियन बार।

संपादित करें: मुझे एहसास है कि मेरी मजबूती मुझे नीचे गिरने जा रही है ... लेकिन यह सही जवाब है।

+3

आप यह बताते हुए जवाब क्यों कम कर देंगे कि Int16 इंट 32 की तुलना में कम रैम लेता है? यह आम तौर पर करता है और यह एक महत्वपूर्ण कारक हो सकता है यदि आपको स्मृति में पूर्णांक की एक बड़ी श्रृंखला को स्टोर करने की आवश्यकता है। पीएस। मैंने वास्तव में आपकी गड़बड़ी का आनंद लिया और इसके लिए आपको कम नहीं किया। :) –

+1

सबसे परेशान चीज: Stream.Read और Stream.Write स्ट्रीम करते समय 'int' ऑफसेट स्वीकार करते हैं। लम्बाई लंबा है ... duh! चंकिंग भी प्रदान नहीं किया जाता है! – chakrit

+1

क्योंकि जब तक आप 20 वर्षीय कंप्यूटर (16 बिट रैम के साथ) पर काम नहीं कर रहे हैं या मेमोरी ऑप्टिमाइज्ड स्ट्रक्चर में संपीड़ित स्टोरेज का उपयोग कर रहे हैं, –

0

यदि हम केवल कुछ संख्याओं के बारे में बात कर रहे हैं, तो सबसे बड़ा चुनने से आपके समग्र राम उपयोग में कोई उल्लेखनीय अंतर नहीं आएगा और यह केवल काम करेगा। यदि आप बहुत सारी संख्याओं के बारे में बात कर रहे हैं, तो आपको उन पर TryParse() का उपयोग करना होगा और राम को बचाने के लिए सबसे छोटा int प्रकार पता लगाना होगा।

0

सभी कंप्यूटर परिमित हैं। आपको लगता है कि आपके उपयोगकर्ताओं की आवश्यकताओं के आधार पर आपको ऊपरी सीमा को परिभाषित करने की आवश्यकता है।

यदि आपके पास वास्तव में कोई ऊपरी सीमा नहीं है और 'असीमित' मानों को अनुमति देना चाहते हैं, तो अपने प्रोजेक्ट में नेट जावा रनटाइम लाइब्रेरी जोड़ने का प्रयास करें, जो आपको java.math.BigInteger क्लास का उपयोग करने की अनुमति देगा - जो गणित करता है लगभग असीमित आकार पूर्णांक।

नोट: नेट जावा पुस्तकालय पूर्ण देवस्टूडियो के साथ आते हैं, लेकिन मुझे नहीं लगता कि वे एक्सप्रेस के साथ आते हैं।

9

बस इसे जोड़ना चाहता था ... मुझे याद आया कि .NET 1.1 के दिनों में संकलक को अनुकूलित किया गया था ताकि 'int' ऑपरेशन बाइट या लघु संचालन से वास्तव में तेज़ हो।

मेरा मानना ​​है कि यह आज भी है, लेकिन अब मैं कुछ परीक्षण चला रहा हूं।


संपादित करें: मैं एक आश्चर्य खोज मिल गया है: ऐड, घटाना और छोटी (रों) वास्तव में वापसी पूर्णांक के लिए आपरेशन गुणा!

3

बार-बार कोशिश कर रहा है TryParse() को समझ में नहीं आता है, आपके पास पहले से घोषित एक फ़ील्ड है। जब तक आप उस प्रकार के ऑब्जेक्ट को ऑब्जेक्ट नहीं बनाते तब तक आप अपना दिमाग नहीं बदल सकते। अच्छा विचार नहीं।

फ़ील्ड का प्रतिनिधित्व करने वाले किसी भी डेटा का भौतिक अर्थ है। यह एक उम्र, आकार, एक गिनती आदि है। शारीरिक मात्रा में उनकी सीमा पर यथार्थवादी संयम हैं। उस प्रकार को चुनें जो उस श्रेणी को स्टोर कर सकता है। ओवरफ्लो को ठीक करने का प्रयास न करें, यह एक बग होगा।

+0

कारण की आवाज़! –

1

वर्तमान सबसे लोकप्रिय उत्तर के विपरीत, छोटे पूर्णांक (जैसे इंटेल 16 और एसबीटी) अक्सर बड़े पूर्णांक (जैसे इंट 32 और इंट 64) की तुलना में स्मृति में कम जगह लेते हैं।आप आसानी से प्रबंधित हेप आकार को मापने के लिए sbyte/short/int/long के बड़े सरणी और perfmon का उपयोग करके इसे सत्यापित कर सकते हैं। यह सच है कि कई सीएलआर स्वाद इन पूर्णांकों को सीपीयू-विशिष्ट अनुकूलन के लिए विस्तृत करेंगे जब उनके पर अंकगणित और ऐसा, लेकिन जब किसी ऑब्जेक्ट के हिस्से के रूप में संग्रहीत किया जाता है, तो वे आवश्यकतानुसार जितनी मेमोरी लेते हैं।

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

एक स्ट्रिंग को एक पूर्णांक में परिवर्तित करने जैसे साधारण मामलों के लिए, मैं सहमत हूं कि एक इंट 32 (सी # इंट) आमतौर पर सबसे अधिक समझ में आता है और संभव है कि अन्य प्रोग्रामर क्या उम्मीद करेंगे।

संबंधित मुद्दे