سؤال

ما هي الصيغ الرياضية لحساب القيمة 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 ومعرفة ما إذا كنت تكتشف النمط ...

أعتقد أنك ستجد هذا مفيدًا:
عدد صحيح (علوم الكمبيوتر) @ ويكيبيديا

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