تقسيم كثافة العمليات وعدم القدرة لطفلين مقرها
-
06-07-2019 - |
سؤال
وأنا أعلم أنك يمكن تقسيم عدد السلطة لطفلين في نصف مثل ذلك:
halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16
ويمكنك أن تفعل نفس الشيء بالنسبة لعدد صحيح والتي يحدها من عدم القدرة اثنين من الفضاء؟
و(لنفترض أنك تريد النطاق الخاص بك إلى أن يقتصر على مجموعة من الأعداد الصحيحة التي تنسجم مع 4 قاعدة رقم 52 مساحة غير الموقعة)
المحلول
هل يمكن استخدام ما يلي
rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704
نصائح أخرى
حسنا، بالطبع. & 0xffff
هو نفس % 0x10000
و>> 16
هو نفس / 0x10000
. انها مجرد أن القسمة على قوة لطفلين هو أكثر كفاءة عندما يتم ذلك مع عمليات قليلا مثل تحويل واخفاء. تعمل الفرقة مع أي عدد (داخل نطاق التمثيل).
وبمجرد أن ندرك أن &
و>>
تستخدم للقيام modulo
اوند division
حساب على التوالي، يمكنك كتابة ما تريد على النحو التالي:
lower = some4DigitsNumberBase52 % (52 * 52)
upper = some4DigitaNumberBase52 / (52 * 52)
وهذا هو الأساس للقيام حساب القاعدة. يمكنك أيضا استخلاص الحل من الخوارزمية التي يعرض رقم في قاعدة محددة: كيف يمكنك الخروج مع أقصى اليمين رقمين والأرقام أقصى اليسار 2