الدرس 56: المعاملات على مستوى البت (Bitwise Operators)
تعمل المعاملات على مستوى البت على البتات الفردية (0 و 1) للأنواع الصحيحة. وهي ضرورية للبرمجة منخفضة المستوى، والتشفير، وبرمجة الشبكات، وتحسين التخزين.
| المعامل | الوصف |
|---|---|
& | AND بت (يضبط البت إذا كان كلا البتين المقابلين 1) |
| ` | ` |
^ | XOR بت (يضبط البت إذا كان البتان المقابلان مختلفين) |
~ | NOT بت (يقلب جميع البتات: 0 يصبح 1، و 1 يصبح 0) |
<< | إزاحة لليسار (يزيح البتات لليسار، ويملأ اليمين بالأصفار) |
>> | إزاحة لليمين (يزيح البتات لليمين) |
استخدام عملي: ضبط، مسح، وقلب البتات
بفرض لدينا عدد صحيح من 8 بت يسمى flags.
1. ضبط بت (باستخدام OR |)
للتأكد من أن البت الثالث (الفهرس 2) هو 1، بغض النظر عن حالته الحالية:
c unsigned char flags = 0b00100000; // قيمة مثال 32 unsigned char MASK = 0b00000100; // قناع للبت رقم 2 (القيمة 4)
// ضبط البت 2 (32 | 4 = 36) flags = flags | MASK;
2. مسح بت (باستخدام AND & مع NOT ~)
للتأكد من أن البت الخامس (الفهرس 4) هو 0:
c unsigned char flags = 0b00110000; // قيمة مثال 48 unsigned char MASK = 0b00010000; // قناع للبت رقم 4 (القيمة 16)
// مسح البت 4 (48 & ~16 = 32) flags = flags & (~MASK);
3. إزاحة البتات
الإزاحة لليسار (<<) تعادل الضرب في قوى العدد 2 (إذا لم يحدث تجاوز سعة).
c int x = 5; // 00000101 int y = x << 2; // 00010100 (20). أي 5 * 2^2 = 20.