0Pricing
C Academy · درس

المعاملات على مستوى البت

AND وOR وXOR وNOT

المعاملات على مستوى البت درس مجاني في C Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

العمل على مستوى البتات

تُخزَّن الأعداد الصحيحة على شكل تسلسلات من البتات. وتتيح لكم C التعامل مع هذه البتات مباشرةً باستخدام المعاملات على مستوى البتات.

المعاملات الأساسية الأربعة هي AND & وOR | وXOR ^ وNOT ~.

#include <stdio.h>

int main(void) {
    unsigned a = 12;
    unsigned b = 10;
    printf("a & b = %u\n", a & b);
    return 0;
}

AND على مستوى البتات

يضبط المعامل & بت النتيجة إلى 1 فقط عندما تكون كلتا بتّي الإدخال مساويتين لـ 1.

بالنسبة إلى 12 (1100) و10 (1010)، تكون النتيجة 8 (1000).

#include <stdio.h>

int main(void) {
    unsigned a = 12, b = 10;
    printf("%u & %u = %u\n", a, b, a & b);
    return 0;
}

OR على مستوى البتات

يضبط المعامل | بت النتيجة إلى 1 عندما يكون واحد على الأقل من بتّي الإدخال مساويًا لـ 1.

إن OR العدد 12 (1100) مع 10 (1010) يساوي 14 (1110).

#include <stdio.h>

int main(void) {
    unsigned a = 12, b = 10;
    printf("%u | %u = %u\n", a, b, a | b);
    return 0;
}

XOR على مستوى البتات

يضبط المعامل ^ (OR الحصري) بت النتيجة إلى 1 عندما تختلف بتّا الإدخال.

إن XOR العدد 12 (1100) مع 10 (1010) يساوي 6 (0110).

#include <stdio.h>

int main(void) {
    unsigned a = 12, b = 10;
    printf("%u ^ %u = %u\n", a, b, a ^ b);
    return 0;
}

NOT على مستوى البتات

يقلب المعامل ~ كل بت. وفي القيم غير الموقعة، تكون ~0 جميعها آحادًا، أي القيمة القصوى.

#include <stdio.h>

int main(void) {
    unsigned char x = 0;
    printf("~0 as 8-bit = %u\n", (unsigned char)~x);
    return 0;
}

طباعة البتات

تجعل دالة مساعدة تطبع التمثيل الثنائي لبايت نتائج العمليات على مستوى البتات أسهل فهمًا. نختبر كل بت بدءًا من الأعلى إلى الأدنى.

#include <stdio.h>

void print_bits(unsigned char v) {
    for (int i = 7; i >= 0; i--) {
        putchar((v >> i) & 1 ? '1' : '0');
    }
    putchar('\n');
}

int main(void) {
    print_bits(12);
    print_bits(10);
    return 0;
}

تبديل باستخدام XOR

يمتلك XOR خاصية مفيدة: يمكنكم تبديل عددين صحيحين دون استخدام متغير مؤقت.

طبّقوا XOR ثلاث مرات لتبادل القيمتين.

#include <stdio.h>

int main(void) {
    int a = 5, b = 9;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d b=%d\n", a, b);
    return 0;
}

XOR مع القيمة نفسها

أي قيمة تُجرى عليها عملية XOR مع نفسها تساوي 0، وأي قيمة تُجرى عليها عملية XOR مع 0 تبقى دون تغيير.

تُعدّ هاتان الهويتان أساس تبديل XOR والعديد من الحيل البرمجية.

#include <stdio.h>

int main(void) {
    int x = 42;
    printf("x ^ x = %d\n", x ^ x);
    printf("x ^ 0 = %d\n", x ^ 0);
    return 0;
}

على مستوى البتات مقابل المنطقي

لا تخلطوا بين & و&&، أو بين | و||.

  • تعمل المعاملات على مستوى البتات على كل بت من معامليها.
  • تقيّم المعاملات المنطقية قيمة الحقيقة وتعيد 0 أو 1.
#include <stdio.h>

int main(void) {
    printf("2 & 1 = %d\n", 2 & 1);
    printf("2 && 1 = %d\n", 2 && 1);
    return 0;
}

دمج المعاملات

تتحد المعاملات على مستوى البتات للتعبير عن شروط معقدة. نحتفظ هنا بالبتات الموجودة في a وغير الموجودة في b.

#include <stdio.h>

int main(void) {
    unsigned a = 0b1111;
    unsigned b = 0b0101;
    unsigned only_a = a & ~b;
    printf("only_a = %u\n", only_a);
    return 0;
}

التحقق من التكافؤ باستخدام XOR

يخبركم إجراء XOR على جميع البتات بتكافؤ العدد، أي ما إذا كان عدد البتات المضبوطة فرديًا. اختزلوا القيمة تكرارًا.

#include <stdio.h>

int main(void) {
    unsigned v = 0b1011;
    int parity = 0;
    while (v) {
        parity ^= (v & 1);
        v >>= 1;
    }
    printf("parity = %d\n", parity);
    return 0;
}

اختبار سريع

اختبروا معرفتكم بالمعاملات على مستوى البتات.

مراجعة

تعلمتم معاملات البتات:

  • يحتفظ & AND بالبتات المضبوطة في كلا المعاملين.
  • يحتفظ | OR بالبتات المضبوطة في أيٍّ من المعاملين.
  • يحتفظ ^ XOR بالبتات المختلفة.
  • يقلب ~ NOT جميع البتات.
  • تختلف معاملات البتات عن المعاملات المنطقية && و||.

الأسئلة الشائعة

هل درس «المعاملات على مستوى البت» مجاني؟

نعم — نص درس «المعاملات على مستوى البت» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «المعاملات على مستوى البت»؟

AND وOR وXOR وNOT تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «المعاملات على مستوى البت»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المعاملات على مستوى البت
  2. الإزاحات
  3. أقنعة البت والأعلام
  4. حيل البت العملية
← العودة إلى C Academy