أقنعة البت والأعلام
تعيين البتات ومسحها وتبديلها
أقنعة البت والأعلام درس مجاني في C Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.
البتات كأعلام
يمكن لعدد صحيح واحد تخزين العديد من الإعدادات التي تكون في وضع التشغيل أو الإيقاف، إعداد واحد لكل بت. ويُسمّى كل بت علمًا.
هذه الطريقة مدمجة وسريعة، وتشيع في أنظمة التشغيل والشفرة المضمّنة.
#include <stdio.h>
int main(void) {
unsigned flags = 0;
printf("Initial flags = %u\n", flags);
return 0;
}تعريف الأقنعة
القناع هو قيمة تكون فيها بتات محددة مضبوطة. عرّف كل علم على أنه قوة للعدد اثنين حتى يشغل بتًا خاصًا به.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
return 0;
}ضبط بت
لتشغيل علم، أجرِ OR للقيمة مع القناع: flags |= MASK.
تبقى البتات المضبوطة مسبقًا مضبوطة.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = 0;
flags |= READ;
flags |= WRITE;
printf("flags = %u\n", flags);
return 0;
}مسح بت
لإيقاف علم، أجرِ AND مع القناع المعكوس: flags &= ~MASK.
يحتوي القناع المعكوس على 0 في البت المستهدف وعلى 1 في جميع المواضع الأخرى.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
flags &= ~WRITE;
printf("flags = %u\n", flags);
return 0;
}تبديل بت
لقلب حالة علم، أجرِ XOR مع القناع: flags ^= MASK.
إذا كان العلم قيد التشغيل، فسيُوقَف، والعكس صحيح.
#include <stdio.h>
#define EXEC (1u << 2)
int main(void) {
unsigned flags = 0;
flags ^= EXEC;
printf("after toggle: %u\n", flags);
flags ^= EXEC;
printf("after toggle: %u\n", flags);
return 0;
}اختبار بت
للتحقق مما إذا كان العلم قيد التشغيل، أجرِ AND مع القناع واختبر النتيجة: تكون flags & MASK غير صفرية عندما يكون العلم مضبوطًا.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ;
if (flags & READ) printf("READ is on\n");
if (flags & WRITE) printf("WRITE is on\n");
else printf("WRITE is off\n");
return 0;
}ضبط عدة أعلام
ادمج الأقنعة باستخدام OR لضبط عدة أعلام دفعة واحدة.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | WRITE | EXEC;
printf("all set: %u\n", flags);
return 0;
}التحقق من عدة أعلام دفعة واحدة
للتحقق من أن كل أعلام مجموعة ما مضبوطة، أجرِ AND مع القناع المدمج وقارن النتيجة بالقناع نفسه.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
unsigned need = READ | WRITE;
if ((flags & need) == need) printf("both present\n");
return 0;
}طباعة الأعلام النشطة
كرّر على أقنعتك للإبلاغ عن الأعلام المفعّلة حاليًا.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | EXEC;
if (flags & READ) printf("R");
if (flags & WRITE) printf("W");
if (flags & EXEC) printf("X");
printf("\n");
return 0;
}عدّ البتات المضبوطة
لمعرفة عدد الأعلام المفعّلة، عُدّ البتات المضبوطة عبر مسح أقل بت مضبوط بشكل متكرر.
#include <stdio.h>
int main(void) {
unsigned v = 0b10110;
int count = 0;
while (v) {
v &= (v - 1);
count++;
}
printf("set bits = %d\n", count);
return 0;
}التعدادات للأعلام
يساعد استخدام enum على تنظيم تعريفات الأعلام وجعلها أسهل قراءة.
#include <stdio.h>
enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };
int main(void) {
unsigned opts = OPT_A | OPT_C;
printf("opts = %u\n", opts);
if (opts & OPT_C) printf("C enabled\n");
return 0;
}تحقّق سريع
اختبر معلوماتك عن الأقنعة والأعلام.
مراجعة
تعلّمت إدارة أعلام البتات:
- اضبط العلم باستخدام
flags |= MASK. - امسحه باستخدام
flags &= ~MASK. - بدّل حالته باستخدام
flags ^= MASK. - اختبره باستخدام
flags & MASK. - عرّف الأقنعة على أنها قوى للعدد اثنين، غالبًا باستخدام وحدات الماكرو أو التعدادات.
الأسئلة الشائعة
هل درس «أقنعة البت والأعلام» مجاني؟
نعم — نص درس «أقنعة البت والأعلام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.
ماذا ستتعلم في «أقنعة البت والأعلام»؟
تعيين البتات ومسحها وتبديلها تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟
لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أقنعة البت والأعلام»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟
نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المعاملات على مستوى البت
- الإزاحات
- أقنعة البت والأعلام
- حيل البت العملية