Min و Max قيمة النوع المتكامل في C#
سؤال
ما هي الصيغ الرياضية لحساب القيمة Min و Max لنوع متكامل باستخدام الآلة الحاسبة الخاصة بك. أعلم أنه يمكنك استخدام integer.max أو integer.min وما إلى ذلك أو ابحث عنه على MSDN ، لكنني أريد أن أعرف كيفية حسابه.
المحلول
لأنواع غير موقعة:
- قيمة دقيقة = 0
- أقصى قيمة = (2 ** (عدد البتات)) - 1
وذلك ل UInt32
:
Min value = 0
Max value = (2 ** 32) - 1
= 4294967296 - 1
= 4294967295
لأنواع موقعة:
- min value = 0 - (2 ** (عدد البتات - 1))
- أقصى قيمة = (2 ** (عدد البتات - 1)) - 1
وذلك ل Int32
:
Min value = 0 - (2 ** (32 - 1))
= 0 - (2 ** 31)
= 0 - 2147483648
= -2147483648
Max value = (2 ** (32 - 1)) - 1
= (2 ** 31) - 1
= 2147483648 - 1
= 2147483647
نصائح أخرى
أنا أستخدم عددًا صحيحًا موقّعًا في 32 نقطة في هذا المثال. يتم استخدام 31 بت لإنشاء القيمة 2^31. كما يجب تضمين الصفر ، يجب عليك طرح واحدة.
2^31-1
عندما يكون السلبي ، لا يجب تضمين الصفر ، وبالتالي تحصل على النطاق الكامل.
-2^31
في حالة وجود عدد صحيح غير موقّع ، فإن الحد الأقصى هو ببساطة 2^32-1
, و MIN 0
.
تحتاج إلى معرفة عدد البتات التي يكون النوع وما إذا كانت موقعة أم لا.
على سبيل المثال ، أ int
هو 32 بت في C# ويتم توقيعه. هذا يعني أن هناك 31 بت لتمثيل الرقم (يتم استخدام 1 بت لتحديد السلبي أو المبتكر). لذلك سوف تحسب 231 وطرح واحد وهو 2147483647 ، (وهو ما يعود integer.maxvalue).
Similary byte
هو 8 بت وليس موقعة لذلك القيمة الأقصى 28 -1 أو 255.
مثال على إجابة سؤالك
موقعة:
Min=(1 << ((sizeof(int) * 8) - 1));
Max=~(1 << ((sizeof(int) * 8) - 1));
ايضا
Min=~(int)((~((uint)0))>>1);
Max=(int)((~((uint)0))>>1);
int غير موقعة:
Min=0;
Max=~((uint)0);
يتم اشتقاق قيمة MIN/MAX لمتغير عدد صحيح من كمية البتات المستخدمة (عادةً إلى قوة 2 ، أي 2Bits ، 4Bits ، 8Bits). يستخدم INT في C# 32 بت ، وعلى هذا النحو يمكن أن يكون لها قيمة أقصى قدرها 4،294،967،295 - لأن هذا هو الحد الأقصى لقيمة 32 بت من البيانات يمكن أن تمثل - كما هو فهمي ، على أي حال.
إذا كانت الحاسبة الخاصة بك تحتوي على تحويل عشري إلى ثنائي (ستعمل أيضًا من ديسمبر إلى هكس) ، فحاول تحويل int32.maxvalue ومعرفة ما إذا كنت تكتشف النمط ...
أعتقد أنك ستجد هذا مفيدًا:
عدد صحيح (علوم الكمبيوتر) @ ويكيبيديا