ماذا يفعل رمز bitwise "$ n & ($ n - 1)"؟
-
20-09-2019 - |
سؤال
ماذا يعني هذا الرمز وما هي الطرق الأخرى التي تنجز نفس الشيء دون استخدام تغيير البتات؟
if ($n & ($n - 1))
المحلول
تلك الصيغة يتحقق لمعرفة ما إذا كان الرقم هو قوة 2 (إذا كانت حالتك كما هو مكتوب ، فإن الرقم هو ليس قوة اثنين).
بطريقة أخرى ، يتحقق الاختبار الخاص بك لمعرفة ما إذا كان هناك أكثر من بت واحد "1" في التمثيل الثنائي لـ $n
. إذا كان هناك صفر أو مجموعة بت واحدة فقط ، فسيكون الاختبار الخاص بك خطأ.
إنها إلى حد بعيد الطريقة الأكثر فعالية لتحديد تلك الخاصية.
نصائح أخرى
أولاً ، هذا الرمز صالح PHP ، لذلك عنوانك ضعيف.
ثانياً ، يبدو أن الحساب الثنائي يحدث مثل هذا:
42 = 101010
&
41 = 101001
-----------
40 = 101000
مثل Greg ، فإن هذه هي أسرع طريقة للتحقق من وجود طاقة من رقم 2 ، ولكن الرمز الذي قدمته للتحقق لمعرفة ما إذا كان الرقم هو ليست قوة 2. يمكن التأكد من ذلك بسهولة من خلال سياسة PHP المتمثلة في: أي قيمة غير خالية/غير صفرية صحيحة.