كل المقالات

العمليات على البتات: كيف تعمل AND وOR وXOR على مستوى البت

رأس حزمة TCP يحمل عدة أعلام تحكم — SYN وACK وFIN وغيرها — مضغوطة كلها في بايت واحد، بحيث يشغل كل علم بتًا واحدًا فقط. فحص ما إذا كان علم SYN مفعّلًا لا يحتاج أكثر من عملية AND بسيطة بين ذلك البايت وقناع مناسب، وهذا مثال يومي على العمليات على البتات في أي أداة تحليل شبكات.

AND وOR وXOR وNOT — العمليات الأساسية الأربع

  • AND (&) — يساوي البت الناتج 1 فقط إذا كان كلا بتّي الإدخال يساويان 1. تُستخدم للتحقق من تفعيل علم معيّن ضمن مجموعة أعلام.
  • OR (|) — يساوي البت الناتج 1 إذا كان أحد بتّي الإدخال على الأقل يساوي 1. تُستخدم لدمج عدة أعلام في قيمة واحدة.
  • XOR (^) — يساوي البت الناتج 1 إذا اختلف بتّا الإدخال؛ تطبيق XOR مرتين بنفس القيمة يعيد الأصل.
  • NOT (~) — يعكس كل بت من رقم.

كيف يختلف AND على مستوى البت عن AND المنطقي

يعمل AND المنطقي (&& في معظم اللغات) مع قيم بولية كاملة ويعطي true/false، بينما تعالج AND على مستوى البت (&) كل بت من رقمين على حدة وتعيد رقمًا. الخلط بينهما سبب شائع للأخطاء البرمجية، خصوصًا أن بعض اللغات تسمح للاثنين بالترجمة دون أي خطأ في الأنواع.

لماذا ترتبط هذه الأداة بمحوّل الأنظمة العددية

قيمة علم مثل 18 بالنظام العشري لا تخبرك بشيء عن الأعلام المفعّلة، بينما نفس القيمة كـ0b10010 تُظهر فورًا أي بتات مضبوطة تحديدًا. لهذا السبب تُدرَس العمليات على البتات دائمًا تقريبًا بالنظام الثنائي أو السداسي عشري وليس العشري — ومحوّل الأنظمة العددية هو غالبًا الخطوة الأولى قبل أن يصبح لعمليات AND وOR وXOR أي معنى بصري.

لماذا نحتاج هذا

  • تخزين مجموعة من الأعلام البولية والتحقق منها بكفاءة في رقم واحد.
  • فهم كود منخفض المستوى يعمل مع بروتوكولات الشبكة أو الصيغ الثنائية.
  • تحسين حسابات تكون فيها العمليات على البتات أسرع من الحساب العادي.

فخ أسبقية العوامل

في معظم لغات البرمجة، تمتلك عوامل البتات & و| أسبقية أقل من عوامل المقارنة — لذا يُحسَب تعبير مثل if (a & b == c) فعليًا كـa & (b == c)، وليس كما يتوقع الكاتب عادة. هذا أحد أكثر مصادر الأخطاء الخفية شيوعًا عند العمل بأقنعة البتات، والطريقة الموثوقة لتجنبه هي وضع العمليات على البتات دائمًا بين أقواس صريحة.

جرّب الأداة