سؤال

ماذا يعني هذا الرمز وما هي الطرق الأخرى التي تنجز نفس الشيء دون استخدام تغيير البتات؟

if ($n & ($n - 1))
هل كانت مفيدة؟

المحلول

تلك الصيغة يتحقق لمعرفة ما إذا كان الرقم هو قوة 2 (إذا كانت حالتك كما هو مكتوب ، فإن الرقم هو ليس قوة اثنين).

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

إنها إلى حد بعيد الطريقة الأكثر فعالية لتحديد تلك الخاصية.

نصائح أخرى

أولاً ، هذا الرمز صالح PHP ، لذلك عنوانك ضعيف.

ثانياً ، يبدو أن الحساب الثنائي يحدث مثل هذا:

42 = 101010
   &
41 = 101001
-----------
40 = 101000

مثل Greg ، فإن هذه هي أسرع طريقة للتحقق من وجود طاقة من رقم 2 ، ولكن الرمز الذي قدمته للتحقق لمعرفة ما إذا كان الرقم هو ليست قوة 2. يمكن التأكد من ذلك بسهولة من خلال سياسة PHP المتمثلة في: أي قيمة غير خالية/غير صفرية صحيحة.

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