طريقة الاستخدام
- اكتب القيمة الأولى في القيمة الأولى (A)، والثانية في القيمة الثانية (B) إذا كانت العملية تستعملها.
- اختر نظام الأعداد الذي كُتبت به القيم، ثم العملية.
- في الإزاحة أو التدوير، حدّد الإزاحة أو التدوير بمقدار. واختر العرض الذي يجب أن تكون عليه النتيجة.
- اقرأ النتيجة في السداسي عشر وعشري (غير موقّع) وثنائي، والجدول بتاً بتاً تحتها.
عمليات المنطق
0xCA AND 0x0F = 11001010 AND 00001111 = 00001010 = 0x0A
- AND تعطي 1 فقط حين يكون البتان كلاهما 1. تستعملها لإبقاء بعض البتات ومسح غيرها.
- OR تعطي 1 حين يكون أحد البتين 1. تستعملها لضبط البتات.
- XOR تعطي 1 حين يكون واحد من البتين فقط 1. وتطبيق XOR نفسه مرتين يعيد القيمة الأصلية.
- NAND وNOR هما AND وOR يليهما NOT. وNOT تقلب كل بت داخل العرض.
الإزاحات والتدويرات
الإزاحة إلى اليسار تنقل كل بت خانة واحدة إلى أعلى، وتملأ الأسفل بأصفار، والبت الذي يخرج من الأعلى يضيع. والإزاحة المنطقية إلى اليمين تنقل كل بت إلى أسفل، وتملأ الأعلى بأصفار. أما الإزاحة الحسابية إلى اليمين فتملأ الأعلى بنسخ من بت الإشارة، فيبقى العدد السالب سالباً. والتدوير يعيد البت الذي يخرج من أحد الطرفين إلى الطرف الآخر.
0xCA مزاحة إلى اليسار بمقدار 1 = 10010100 (0x94)؛ منطقياً إلى اليمين = 01100101 (0x65)؛ حسابياً إلى اليمين = 11100101 (0xE5)؛ تدوير إلى اليسار = 10010101 (0x95)
للعرض أثره
يساوي نفي الصفر 0xFF عند عرض 8 بتات، و0xFFFF عند عرض 16 بتاً، و0xFFFFFFFF عند عرض 32 بتاً، لأن الناتج له بتات بقدر العرض. والقيمة التي تحتاج إلى بتات أكثر من العرض لا تُخزَّن كاملة: تستعمل الأداة أدنى بتاتها، وتعرض سطر الفحص بالأحمر.
ما لا تغطيه الأداة
- اللغات تختلف. تحوّل عوامل البت في JavaScript معاملاتها إلى أعداد صحيحة من 32 بتاً، فلا تعرض نتائج من 64 بتاً. أما هذه الأداة فتعرض بتات العرض الذي تختاره، مع BigInt حتى تكون قيم 64 بتاً دقيقة.
- حقول البتات داخل البنية، وترتيب البايتات، وصيغ الملفات: لها عارض السداسي عشر.
مثال محلول: 0xCA AND 0x0F بعرض 8 بتات
اكتب CA في القيمة الأولى و0F في القيمة الثانية، مع ضبط نظام الأعداد على السداسي عشر والعرض على 8 بتات. النتيجة 00001010، أي 0x0A في السداسي عشر و10 في العشري. لا يبقى إلا البتات التي يملكها الرقمان في المكان نفسه: بتان، كلاهما في الخانات الأربع الدنيا التي يحتفظ بها 0F.
| النتيجة | القيمة |
|---|---|
| السداسي عشر | 0x0A |
| ثنائي | 0b0000 1010 |
| عشري (غير موقّع) | 10 |
الأسئلة الشائعة
ما الفرق بين الإزاحة المنطقية والإزاحة الحسابية إلى اليمين؟
تنقل كلتاهما البتات خانة واحدة إلى الأسفل. تملأ الإزاحة المنطقية الأعلى بأصفار، فتعامل القيمة على أنها غير موقّعة. أما الحسابية فتنسخ بت الإشارة، فيبقى العدد السالب سالباً: القيمة 0xCA هي −54، وإزاحتها إلى اليمين بمقدار 1 تعطي −27 (0xE5).
لماذا يعطي NOT نتائج مختلفة بعروض مختلفة؟
تقلب NOT كل بت في العرض. الصفر هو 00000000 في 8 بتات، فتعطي NOT القيمة 11111111 (0xFF)، أما في 32 بتاً فللصفر 32 بتاً، فتعطي NOT القيمة 0xFFFFFFFF. العدد نفسه له عدد بتات مختلف في كل عرض.
ما الذي يفعله التدوير ولا تفعله الإزاحة؟
تفقد الإزاحة البتات التي تخرج من أحد الطرفين. أما التدوير فيعيدها إلى الطرف الآخر، فلا يضيع أي بت. والتدوير بمقدار العرض يعطي القيمة نفسها من جديد.
لماذا تُعلَّم القيمة حين لا تتسع في العرض؟
القيمة التي تحتاج إلى بتات أكثر من العرض لا يمكن تخزينها كاملة. تستعمل الأداة أدنى البتات، فيصبح 300 في 8 بتات العدد 44، ويبيّن سطر الفحص ما حدث، حتى لا تُؤخذ النتيجة على أنها القيمة التي كتبتها.
هل أستطيع كتابة الأعداد الثنائية مع مسافات؟
نعم. تُتجاهل المسافات والشرطات السفلية، فالعددان 1100 1010 و11001010 قيمة واحدة. ويجوز أن يبدأ السداسي عشر بالبادئة 0x، وأن يبدأ الثنائي بالبادئة 0b.
المصادر
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.