كم عدد القيم التي يمكن تمثيلها باستخدام N بت؟

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

  •  25-09-2019
  •  | 
  •  

سؤال

على سبيل المثال ، إذا n=9, إذن كم عدد القيم المختلفة التي يمكن تمثيلها في 9 أرقام ثنائية (بت)؟

تفكيري هو أنه إذا قمت بتعيين كل من هذه الأجزاء الـ 9 على 1 ، فسأجعل أعلى عدد ممكن من أن هذه الأرقام التسعة قادرة على تمثيلها. لذلك ، أعلى قيمة 1 1111 1111 الذي يساوي 511 في عشري. أستنتج أن 9 أرقام من الثنائية يمكن أن تمثل 511 قيمًا مختلفة.

هل عملية تفكيري صحيحة؟ إذا لم يكن الأمر كذلك ، فهل يمكن لأي شخص أن يشرح ما أفتقده؟ كيف يمكنني تعميمه n بت؟

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

المحلول

29 = 512 قيم ، لأن هذا هو عدد مجموعات الأصفار وتلك التي يمكنك الحصول عليها.


ما تمثله هذه القيم يعتمد على النظام الذي تستخدمه. إذا كان عدد صحيح غير موقّع ، فسيكون لديك:

000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)

في متمم ثنائي, ، الذي يستخدم عادة لتمثيل الأعداد الصحيحة في الثنائي ، سيكون لديك:

000000000 = 0
000000001 = 1
...
011111110 = 254
011111111 = 255 (max)
100000000 = -256 (min) <- yay integer overflow
100000001 = -255
...
111111110 = -2
111111111 = -1

بشكل عام ، مع ك البتات يمكنك تمثيل 2ك القيم. سوف يعتمد نطاقهم على النظام الذي تستخدمه:

غير موقعة: 0 إلى 2ك-1
توقيع: -2K-1 إلى 2K-1-1

نصائح أخرى

ما تفتقده: صفر هو قيمة

طريقة أفضل لحلها هي أن تبدأ صغيرة.

لنبدأ ببت 1. التي يمكن أن تكون إما 1 أو 0. هذه قيمتان ، أو 10 في الثنائي.

الآن 2 بت ، والتي يمكن أن تكون إما 00, 01, 10 أو 11 هذه 4 قيم ، أو 100 في ثنائي ... انظر النمط؟

حسنًا ، نظرًا لأنه "تم تسريبه" بالفعل: أنت في عداد المفقودين ، لذا فإن الإجابة الصحيحة هي 512 (511 هو الأعظم ، لكنه من 0 إلى 511 ، وليس 1 إلى 511).

بالمناسبة ، سيكون تمرين متابعة جيد هو تعميم هذا:

How many different values can be represented in n binary digits (bits)?

دون الرغبة في إعطائك الإجابة هنا هو المنطق.

لديك قيمتان ممكنتان في كل رقم. لديك 9 منهم.

كما هو الحال في القاعدة 10 حيث يكون لديك 10 قيم مختلفة من Digit ، قل أن لديك 2 منها (مما يجعل من 0 إلى 99): من 0 إلى 99 يصنع 100 رقم. إذا قمت بالحساب ، فلديك وظيفة أسية

base^numberOfDigits:
10^2 = 100 ;
2^9 = 512

هناك طريقة أسهل للتفكير في هذا. ابدأ ببت 1. من الواضح أن هذا يمكن أن يمثل قيمتين (0 أو 1). ماذا يحدث عندما نضيف قليلا؟ يمكننا الآن تمثيل ضعف عدد القيم: القيم التي يمكن أن تمثلها من قبل باستخدام 0 إلحاق والقيم التي يمكن أن تمثلها من قبل مع إلحاق 1.

لذا فإن عدد القيم التي يمكن أن تمثلها مع بتات n هي فقط 2^n (2 إلى الطاقة n)

الشيء الذي تفتقده هو ما هو مخطط الترميز الذي يتم استخدامه. هناك طرق مختلفة لتشفير الأرقام الثنائية. ابحث في تمثيلات الأرقام الموقعة. بالنسبة إلى 9 بت ، ستختلف النطاقات ومقدار الأرقام التي يمكن تمثيلها اعتمادًا على النظام المستخدم.

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