ما هي حاسبة XOR على مستوى البِتات؟
تأخذ حاسبة XOR (أو الحصري - Exclusive OR) عددين صحيحين وتدمجهما بِتًا بِتًا. في كل موضع، تكون نتيجة البِت 1 عندما يختلف البِتان المُدخَلان، و0 عندما يتطابقان. وهي إحدى العمليات الأساسية في البرمجة والمنطق الرقمي والتشفير واكتشاف الأخطاء.
كيفية الاستخدام
أدخِل العدد الصحيح الأول (A) ثم العدد الصحيح الثاني (B)، واضغط على زر الحساب. تعرض الحاسبة ناتج XOR بالنظام العشري، بالإضافة إلى تمثيله بالنظامين الثنائي والست عشري حتى تتمكن من التحقق منه بِتًا بِتًا. وهي تقبل الأعداد الموجبة والسالبة معًا.
شرح الصيغة
تُكتب عملية XOR على هيئة A ^ B في معظم لغات البرمجة، وعلى هيئة \( A \oplus B \) في الرمز الرياضي:
وجدول الحقيقة لبِت واحد هو: \(0 \oplus 0 = 0\)، و\(0 \oplus 1 = 1\)، و\(1 \oplus 0 = 1\)، و\(1 \oplus 1 = 0\). وتُطبَّق العملية بشكل مستقل على كل زوج من البِتات. ومن الخصائص المفيدة: A ^ A = 0 وA ^ 0 = A، ولهذا السبب تُستخدم XOR في تبديل القيم وتبديل حالة الأعلام (flags).
مثال محلول
لنأخذ A = 12 وB = 10. بالنظام الثنائي يكون 12 = 1100 و10 = 1010. وبمقارنة كل عمود: \(1 \oplus 1 = 0\)، و\(1 \oplus 0 = 1\)، و\(0 \oplus 1 = 1\)، و\(0 \oplus 0 = 0\)، فنحصل على 0110 = 6. إذًا فإن:
مقارنة العمليات الثنائية
كل عملية ثنائية تعمل على بت واحد في المرة. لكل زوج من البتات المدخلة \(A\) و \(B\)، تنتج العملية بتاً واحداً في الإخراج. الجدول أدناه يعرض جدول الحقيقة الكامل للبت الواحد لأكثر ست عمليات شيوعاً. XOR (أو الحصري، مكتوب \(A \oplus B\)) ينتج 1 فقط عندما تختلف بتات الإدخال الاثنتان.
| A | B | AND (A&B) | OR (A|B) | XOR (A^B) | NAND ~(A&B) | NOR ~(A|B) | XNOR ~(A^B) |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
لاحظ أن XOR هو المتمم الدقيق لـ XNOR، وأن XOR يساوي 1 في بالضبط الصفين حيث تختلف المدخلات. هذه خاصية "كاشف الفرق" هي التي تجعل XOR مفيداً لفحوصات التكافؤ، التشفير البسيط، وتبديل البتات.
XOR عبر أزواج مدخلات شائعة
الجدول التالي يعالج عدة أزواج تمثيلية من خلال عملية XOR الثنائية، موضحاً كل معامل بالنظام الثنائي، ثم النتيجة بالعشري والثنائي والسادس عشري. يتم إجراء XOR بت تلو بت: صف الرقمين الثنائيين واخراج 1 أينما تختلف البتات.
| A | B | A (ثنائي) | B (ثنائي) | A ^ B (عشري) | A ^ B (ثنائي) | A ^ B (سادس عشري) |
|---|---|---|---|---|---|---|
| 5 | 3 | 0101 | 0011 | 6 | 0110 | 0x6 |
| 255 | 15 | 11111111 | 00001111 | 240 | 11110000 | 0xF0 |
| 12 | 12 | 1100 | 1100 | 0 | 0000 | 0x0 |
| 7 | 0 | 0111 | 0000 | 7 | 0111 | 0x7 |
| 10 | 6 | 1010 | 0110 | 12 | 1100 | 0xC |
| -1 | 1 | …11111111 | …00000001 | -2 | …11111110 | 0x…FE |
نمطان بارزان. عندما يكون أحد المعاملات 0، XOR يرجع المعامل الآخر دون تغيير (\(7 \oplus 0 = 7\)). عندما يكون كلا المعاملين متطابقين، XOR يرجع 0 (\(12 \oplus 12 = 0\)). المثال السالب يستخدم تمثيل المتمم الثنائي: \(-1\) كل البتات 1، لذلك إجراء XOR معها على أي قيمة يعكس كل بت (وهذا يعادل NOT الثنائي)، مما يعطي \(-1 \oplus 1 = -2\).
الأسئلة الشائعة
ماذا تعني XOR؟ هي «أو الحصري» (Exclusive OR) — تكون صحيحة فقط عندما يكون أحد المُدخَلين بالضبط صحيحًا (1).
لماذا تُستخدم XOR في التشفير؟ لأن تطبيق XOR على البيانات باستخدام مفتاح هو عملية قابلة للعكس: فإعادة تطبيق المفتاح نفسه مرة أخرى تستعيد البيانات الأصلية (\(A \oplus K \oplus K = A\)).
هل تتعامل مع الأعداد السالبة؟ نعم. تُمثَّل القيم السالبة باستخدام نظام المتمم الثنائي (two's complement)، لذلك قد يتضمن التمثيل الثنائي للأعداد السالبة عددًا كبيرًا من البِتات.