سؤال

لقد رأيت العديد من الأسئلة حول حساب عدد البتات المحددة في insert type of المدخلات ، ولكن لماذا هو مفيد؟

لأولئك الذين يبحثون عن خوارزميات حول عدد البت ، انظر هنا:

  1. عد البتات الشائعة في سلسلة من الطور غير الموقّع
  2. أسرع طريقة لحساب عدد من التحولات بت في int غير موقعة
  3. كيفية حساب عدد البتات المحددة في عدد صحيح 32 بت؟
هل كانت مفيدة؟

المحلول

يمكنك اعتبار سلسلة من البتات set, ، مع 1 يمثل عضوية المجموعة للعنصر المقابل. وبالتالي فإن عدد البت يمنحك population count من المجموعة.

تشمل التطبيقات العملية الضغط والتشفير ورموز تصحيح الأخطاء. انظر على سبيل المثال wikipedia.org/wiki/hamming_weight و wikipedia.org/wiki/hamming_distance.

نصائح أخرى

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

لا أستطيع التفكير في أي وقت كنت أرغب في القيام بذلك على مدار السنوات العشر الماضية أو نحو ذلك ، لذلك أظن أن هذا تمرين برمجة أكثر من الحاجة العملية.

بطريقة مفارقة من الموضة ، من المفيد لسؤال المقابلة لأنه يتطلب بعض التفكير المنخفض على المستوى المنخفض ويبدو أنه لا يتم تعليمه كخوارزمية قياسية في دورات Comp Sci.

بعض الناس يحبون استخدام نقار نقطية للإشارة إلى وجود/عدم وجود "أشياء".

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

countbits((x XOR (x-1)))-1;

شاهده يعمل.

Let x =     00101100
Then x-1 =  00101011
x XOR x-1 = 00000111

الذي يحتوي على 3 بتات ، لذلك كان Bit 2 هو 1 بت أقل أهمية في الكلمة الأصلية

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