التحويل إلى int16، int32، int64 - كيف تعرف أيهما تختار؟

StackOverflow https://stackoverflow.com/questions/270263

  •  06-07-2019
  •  | 
  •  

سؤال

غالبًا ما يتعين علي تحويل قيمة تم استرجاعها (عادةً كسلسلة) - ثم تحويلها إلى قيمة int.ولكن في C# (.Net) عليك أن تختار إما int16 أو int32 أو int64 - كيف تعرف أيهما تختار عندما لا تعرف حجم الرقم المسترد؟

هل كانت مفيدة؟

المحلول

كل من ذكر هنا أن الإعلان عن Int16 يحفظ ذاكرة الوصول العشوائي يجب أن يحصل على تصويت سلبي.

الإجابة على سؤالك هي استخدام الكلمة الأساسية "int" (أو إذا كنت ترغب في ذلك، استخدم "Int32").

يمنحك هذا نطاقًا يصل إلى 2.4 مليار رقم...كما أن معالجات 32 بت ستتعامل مع تلك البيانات بشكل أفضل...أيضا (و السبب الأكثر أهمية) هو أنه إذا كنت تخطط لاستخدام هذا int لأي سبب تقريبًا ...من المحتمل أن تحتاج إلى أن تكون "int" (Int32).

في إطار عمل .Net، 99.999% من الحقول الرقمية (التي هي أرقام صحيحة) هي "ints" (Int32).

مثال:Array.Length، Process.ID، Windows.Width، Button.Height، إلخ، إلخ، إلخ مليون مرة.

يحرر:أدركت أن حزني سيتسبب في سقوطي..ولكن هذه هي الإجابة الصحيحة.

نصائح أخرى

فقط أردت أن أضيف ذلك ...تذكرت أنه في أيام .NET 1.1 تم تحسين المترجم بحيث تعد عمليات "int" أسرع في الواقع من عمليات البايت أو العمليات القصيرة.

أعتقد أنها لا تزال قائمة حتى اليوم، ولكني أقوم ببعض الاختبارات الآن.


يحرر:لقد حصلت على اكتشاف مفاجئ:عمليات الإضافة والطرح والضرب للقصيرة (القصيرة) تُرجع فعليًا int!

وتحاول مرارا وتكرارا TryParse () لا معنى له، لديك حقل أعلن بالفعل. لا يمكنك تغيير رأيك إلا إذا قمت بإجراء هذا المجال من نوع الكائن. ليست فكرة جيدة.

ومهما البيانات يمثل مجال له معنى مادي. إنها العمر، حجم، العد، وما إلى ذلك كميات الفيزيائية لها قيود واقعية على مداها. اختيار نوع int التي يمكن تخزين هذا النطاق. لا تحاول إصلاح تجاوز، فإنه يكون خطأ.

وعلى عكس الجواب الأكثر شعبية الحالية، الأعداد الصحيحة أقصر (مثل Int16 وSByte) القيام به في كثير من الأحيان تأخذ مساحة أقل في الذاكرة من الأعداد الصحيحة أكبر (مثل Int32 وInt64). يمكنك التحقق بسهولة عن طريق instantiating صفائف كبيرة من sbyte / القصير / الباحث / منذ فترة طويلة واستخدام بيرفمون لقياس أحجام كومة إدارتها. صحيح أن العديد من النكهات CLR سوف تتسع هذه الأعداد الصحيحة لأمثل وحدة المعالجة المركزية محددة عند القيام الحساب عليها وكذا، ولكن عند تخزينها كجزء من كائن، أنها تأخذ فقط قدر الذاكرة كما هو ضروري.

وهكذا، أنت بالتأكيد يجب أن تأخذ بعين الاعتبار حجم خصوصا إذا كان عليك أن تعمل مع قائمة كبيرة من الأعداد الصحيحة (أو مع قائمة كبيرة من الأجسام التي تحتوي على حقول عدد صحيح). يجب عليك أن تنظر أيضا أشياء مثل CLS الامتثال (والذي يرفض أي الأعداد الصحيحة غير موقعة في أعضاء الجمهور).

لحالات بسيطة مثل تحويل سلسلة إلى عدد صحيح، أنا أوافق على Int32 (C # كثافة العمليات) وعادة ما تروق ويرجح ما المبرمجين الأخرى التي يمكن أن تتوقعها.

إذا كنا نتحدث فقط عن أرقام الزوجين، واختيار أكبر لن تحدث فرقا ملحوظا في استخدام ذاكرة الوصول العشوائي الخاص بشكل عام، وسوف تعمل فقط. إذا كنت تتحدث عن الكثير من الأرقام، سوف تحتاج إلى استخدام TryParse () عليها ومعرفة أصغر نوع int، لحفظ ذاكرة الوصول العشوائي.

وجميع أجهزة الكمبيوتر متناهية. تحتاج إلى تعريف حدا أعلى بناء على ما أعتقد أن متطلبات المستخدمين أن يكون.

إذا كان لديك حقا أي الحد الأعلى وتريد السماح القيم "غير محدود"، حاول إضافة مكتبات وقت التشغيل صافي جافا لمشروعك، والتي سوف تسمح لك لاستخدام فئة java.math.BigInteger - التي لا الرياضيات على نحو -unlimited حجم عدد صحيح.

ملحوظة: المكتبات صافي جافا تأتي مع DevStudio الكامل، ولكن لا أعتقد أنها تأتي مع اكسبرس

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top