سؤال

ولدي مشكلة أثناء استخدام المختصة بالبت في جافا سكريبت. أنا لا أعرف ما إذا كنت ذاهب عن هذا الطريق الخاطئ. ولكن هنا يذهب.

ولدي 4 فئات رئيسية. مع 1،2،4،8 الهوية.

وعنصر في جسم بلدي لديه خاصية مع مجموعه من الفئات انها عضو. بمعنى آخر.

{ item: { name: 'lorem', c: 7 }} //member of category 1,2,4

ولدي متغير (ن) الذي يحمل رقم ثم مجتمعة من الفئات النشطة. في هذه الحالة إذا كان كل فئات نشطة حيث بلغ عدد هو 15.

والآن إذا قمت بتغيير ن إلى 11 (الفئة 1،2،8 غير نشط) أحاول تحديد ما هي العناصر نشطة. مثل هذا

for (x in items) {
            item = items[x];
            if ((n & item.c) == item.c) {
                //active
            } else {
                //inactive
            }
        }

وهذا لا يعمل بشكل صحيح. على سبيل المثال إذا item.c هو 9 (عضو 1،8) وبيان إذا تعود صحيح. كما ينبغى. ولكن إذا item.c هو 7 (عضو 1،2،4) بيان إذا ترجع كاذبة. هذه مشكلتي. 7 يجب أن تعود صحيح منذ فئة 1 و 2 لا تزال نشطة.

وأم أن هذا نهج خاطئ؟

و.. فريدريك

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

المحلول

و((n & item.c) == item.c) يعني "صحيح إذا تم تعيين كافة البتات المنصوص عليها في item.c أيضا في ن". إذا item.c هو 7 و n هو 11، يتم تعيين بت 4 في item.c ولكن ليس في ن وبالتالي فإن النتيجة غير صحيح.

وهذا يبدو وكأنه كنت تريد if (n & item.c) { ... }

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