سؤال

في C# كود المصدر قد أعلنت الأعداد الصحيحة مثل:

int i = 5;

أو

Int32 i = 5;

في الوقت الحالي انتشارا 32 بت العالم هم ما يعادلها.ومع ذلك ، ننتقل إلى 64 بت العالم, هل أنا محق في القول بأن التالية سوف تصبح نفس الشيء ؟

int i = 5;
Int64 i = 5;
هل كانت مفيدة؟

المحلول

ولا. و# مواصفات C يحدد بشكل صارم أن int هو اسم مستعار لSystem.Int32 مع بالضبط 32 بت. أن تغيير هذا يكون <م> الرئيسية كسر التغيير.

نصائح أخرى

على int الكلمة الرئيسية في C# ويعرف اسم مستعار System.Int32 ونوع هذا هو (اذا حكمنا من خلال اسم) من المفترض أن يكون عدد صحيح 32-بت.المواصفات:

CLI مواصفات القسم 8.2.2 (المدمج في القيمة المرجعية أنواع) يحتوي الجدول التالي:

  • System.Int32 - توقيع صحيح 32-بت

C# مواصفات القسم 8.2.1 (أنواع محددة سلفا) لديه جدول مماثل:

  • int - 32-بت لا يتجزأ من نوع

هذا يضمن أن كل System.Int32 في CLR ، int في C# سوف يكون دائما 32-بت.

<اقتباس فقرة>   

هل sizeof (testInt) أن يكون من أي وقت مضى 8؟

لا، sizeof (testInt) هو خطأ. testInt هو متغير محلي. المشغل sizeof يتطلب كنوع حجتها. وسوف يكون هذا أبدا 8 لأنها سوف تكون دائما على خطأ.

<اقتباس فقرة>   

وVS2010 برمجيا ج # تمكن عدد صحيح كما 4 بايت، حتى على جهاز 64 بت.

وتصحيح. وألاحظ أن القسم 18.5.8 من C # مواصفات يحدد sizeof(int) باعتباره وقت الترجمة مستمر 4. وهذا هو، عندما تقول sizeof(int) المترجم يستبدل ببساطة أنه مع 4. هو تماما كما لو كنت وقال "4" في شفرة المصدر.

<اقتباس فقرة>   

لا أحد يعرف إذا / متى حان الوقت أن "كثافة" القياسية في C # سيكون 64 بت؟

وأبدا. القسم 4.1.4 من C # مواصفات تنص على أن "كثافة" هو مرادف ل "System.Int32".

إذا ما تريده هو "عدد صحيح مؤشر الحجم" ثم استخدام IntPtr. وIntPtr يتغير حجمها على أبنية مختلفة.

وint دائما مرادفا Int32 على جميع المنابر.

وانه من غير المحتمل جدا أن مايكروسوفت سوف تغيير ذلك في المستقبل، لأنه كسر الكثير من التعليمات البرمجية القائمة التي يفترض int هو 32 بت.

وأعتقد أن ما قد يكون الخلط من أن int هو اسم مستعار لInt32 لذلك سوف يكون دائما 4 بايت، ولكن IntPtr يفترض أن تتناسب مع حجم كلمة العمارة وحدة المعالجة المركزية لذلك سوف يكون 4 بايت على 32- نظام بت و 8 بايت على نظام 64 بت.

وفقا C# مواصفات ECMA-334, ، قسم "11.1.4 أنواع بسيطة" ، كلمة محجوزة int سوف تكون مستعارة إلى System.Int32.لأن هذا هو في المواصفات ومن غير المرجح أن تتغير.

وبغض النظر عما إذا كنت تستخدم إصدار 32 بت أو إصدار 64 بت من CLR، في C # لint يعني دائما System.Int32 وlong يعني دائما System.Int64.

وسوف يلي دائما يكون صحيح في C#:

sbyte توقيع 8 بت ، 1 بايت

بايت موقعة 8 بت ، 1 بايت

قصيرة وقعت 16 بت ، 2 بايت

ushort موقعة 16 بت ، 2 بايت

الباحث توقيع 32 بت و 4 بايت

uint موقعة 32 بت و 4 بايت

طويلة وقعت 64 بت و 8 بايت

ulong موقعة 64 بت و 8 بايت

صحيح الحرفي هو مجرد سلسلة من الأرقام (على سبيل المثال 314159) دون أي من هذه صريحة أنواع.C# يسند النوع الأول في التسلسل (الباحث, uint, طويلة, ulong) التي تناسبها.ويبدو ان هذا كان قليلا مشوش في واحد على الأقل من الردود أعلاه.

غريب على ناقص الأحادية المشغل (علامة ناقص) تظهر قبل سلسلة من الأرقام لا لا والحد من خيار (الباحث, طويلة).الحرفي هو دائما إيجابية ؛ علامة الطرح حقا هو المشغل.لذلك يفترض -314159 هو بالضبط نفس الشيء -((int)314159).باستثناء ما يبدو أن هناك حالة خاصة للحصول على -2147483648 مباشرة إلى الباحث;وإلا فإنه سيكون -((uint)2147483648).التي تفترض أنني لا شيء غير سارة.

بطريقة ما يبدو من المعقول أن نتوقع أن C# (والأصدقاء) لن يكلف نفسه عناء مع "اسفنجي اسم" أنواع >=128 بت الاعداد الصحيحه.سوف تحصل على لطيفة دعم بشكل تعسفي كبيرة الصحيحه و فائقة الدقة دعم UInt128, UInt256 ، إلخ.حالما المعالجات دعم تفعل الرياضيات التي واسعة ، بالكاد من أي وقت مضى استخدام أي من ذلك.64 بت مساحات العناوين حقا كبيرة.إذا كانوا من أي وقت مضى صغيرة جدا سيكون لبعض الباطنية سبب مثل ASLR أو أكثر كفاءة MapReduce أو شيء من هذا.

نعم، كما قال جون، وعلى عكس "C / C ++ العالم، جافا وC # ليست تعتمد على النظام الذي تقوم بتشغيل جرا. وتعريفها بدقة أطوال لبايت / القصير / الباحث / وحيد مزدوجة يطفو / الدقة فترة طويلة، وعلى قدم المساواة على كل نظام.

وكثافة العمليات دون احقة يمكن أن تكون 32BIT وأو 64BIT، فإنه يعتمد على القيمة التي تمثلها.

وكما هو محدد في MSDN:

<اقتباس فقرة>   

عند عدد صحيح الحرفي لا يوجد لديه لاحقة، نوعه هو الأول من هذه الأنواع التي يمكن أن تكون ممثلة قيمته: كثافة العمليات، UINT، طويلة، ULONG

وهنا هو عنوان: https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx

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