سؤال

لدي قائمة انتظار ومجموعة من قوائم الانتظار. buckets هو المصفوفة و collector هي قائمة الانتظار. pass هو عدد صحيح يحفظ أي تمريرة هو.لدي طريقة ترجع لي محتويات الخلية الأولى من قائمة الانتظار المسماة peek(). shiftOne() هي الطريقة التي تحرك رأس قائمة انتظار واحدة إلى ذيل قائمة انتظار أخرى.

الآن هذا الرمز لا يعمل بالنسبة لي

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);

لقد ذهبت خطوة بخطوة واتضح أنني لا أقوم بإخفاء الأجزاء بشكل صحيح.يمكنني تحويلهم ولكن هذا كل ما في الأمر.لذلك سأحاول الوصول إلى العنصر 102 لمجموعة مكونة من 10 عناصر.ما الخطأ الذي افعله؟أنا أعرف peek() و shiftOne() لأنني أستطيع الفرز باستخدام القوى والمعامل.

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

المحلول

أنت تخلط بين radix-10 و radix-2.

إزاحة البت هي القسمة على 2، على سبيل المثال: 102 >> 1 = 102 / 2 = 51.
بصورة مماثلة: 102 >> 8 = 102 / 2^8 = 102 / 256 = 0 (في int شروط).

الرمز (i >> 8) & 0xFF على سبيل المثال يستخدم لاستخراج محتوى البايت الثاني من المعطى i قيمة.

بالنسبة لحالتك - التزم بالقسمة على 10 باستخدام المعامل.

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