1. المقدمة
ترتيب أولويات المعاملات في لغة C مهم لفهم كيفية عمل البرنامج بشكل صحيح والحصول على النتائج المطلوبة. إذا لم يتم فهم ترتيب تقييم المعاملات بشكل صحيح، فقد تحدث نتائج غير متوقعة أو أخطاء (bugs). في هذه المقالة، نشرح بالتفصيل أولويات المعاملات الرئيسية وقواعد الترابط في لغة C، مع أمثلة عملية لزيادة الفهم.
2. أنواع المعاملات وطريقة استخدامها الأساسية
2.1 معاملات العمليات الحسابية
معاملات العمليات الحسابية هي الأساس لإجراء الحسابات العددية. تُستخدم هذه المعاملات كثيراً داخل البرامج، لذلك من المهم فهم أساسياتها جيداً.
+
(الجمع): جمع رقمين.-
(الطرح): طرح رقمين.*
(الضرب): ضرب رقمين./
(القسمة): قسمة رقمين (إذا كانت القسمة بين أعداد صحيحة، يتم تجاهل ما بعد الفاصلة العشرية).%
(الباقي): إيجاد باقي القسمة.
مثال:
int a = 10, b = 3;
int sum = a + b; // 13
int diff = a - b; // 7
int prod = a * b; // 30
int quot = a / b; // 3
int rem = a % b; // 1
2.2 معاملات المقارنة
تُستخدم معاملات المقارنة لمقارنة قيمتين، وتعيد النتيجة إما true (1) أو false (0). وغالباً ما تُستخدم في الجمل الشرطية أو الحلقات.
>
(أكبر من): صحيح إذا كانت القيمة اليسرى أكبر من القيمة اليمنى.<
(أقل من): صحيح إذا كانت القيمة اليسرى أقل من القيمة اليمنى.>=
(أكبر من أو يساوي): صحيح إذا كانت القيمة اليسرى أكبر من أو تساوي القيمة اليمنى.<=
(أقل من أو يساوي): صحيح إذا كانت القيمة اليسرى أقل من أو تساوي القيمة اليمنى.==
(يساوي): صحيح إذا كانت القيمتان متساويتين.!=
(غير متساوي): صحيح إذا كانت القيمتان غير متساويتين.
int a = 5, b = 10;
if (a < b) {
printf("a أصغر من b
"); // سيتم عرضها
}

3. أولويات المعاملات وقواعد الترابط
3.1 ترتيب أولويات المعاملات
ترتيب أولويات المعاملات يحدد أي المعاملات يتم تقييمها أولاً في العبارة التي تحتوي على أكثر من معاملة. فيما يلي جزء من قائمة أولويات المعاملات في لغة C، مرتبة من الأعلى إلى الأقل:
الأولوية | المعاملات | الوصف |
---|---|---|
1 | () [] -> . | استدعاء الدالة، الوصول إلى المصفوفة، المؤشرات للأعضاء |
2 | ++ -- | الزيادة/النقصان بعدية |
3 | ++ -- | الزيادة/النقصان قبلية، معاملات الإشارة |
4 | * / % | الضرب، القسمة، باقي القسمة |
5 | + - | الجمع، الطرح |
6 | << >> | إزاحة البتات |
7 | < <= > >= | معاملات المقارنة |
8 | == != | المساواة وعدم المساواة |
9 | & | AND البتية |
10 | ^ | XOR البتية |
11 | | | OR البتية |
12 | && | AND المنطقية |
13 | || | OR المنطقية |
14 | ? : | المعامل الشرطي |
15 | = += -= | الإسناد والإسناد المركب |
16 | , | معامل الفاصلة |
3.2 قواعد الترابط
قواعد الترابط تحدد من أي جهة يتم تقييم المعاملات ذات نفس الأولوية. معظم المعاملات تستخدم الترابط من اليسار، لكن بعضها (مثل معاملات الإسناد والمعامل الشرطي) يستخدم الترابط من اليمين.
- الترابط من اليسار: مثل معاملات
*
و+
و-
تُقيّم من اليسار إلى اليمين. - الترابط من اليمين: معاملات الإسناد والمعامل الشرطي
? :
تُقيّم من اليمين إلى اليسار.
int a = 5, b = 10, c = 15;
int result = a - b + c; // ترابط من اليسار (a - b) + c = 0
4. ملاحظات مهمة حول أولويات بعض المعاملات
4.1 المعاملات المنطقية
معاملا AND المنطقية (&&
) وOR المنطقية (||
) يُستخدمان عند الجمع بين الشروط. &&
له أولوية أعلى من ||
، لذا انتبه في مثل هذا المثال:
int a = 1, b = 0, c = 1;
if (a && b || c) {
printf("Truen"); // سيتم عرضها
}
في هذا المثال، يتم تقييم a && b
أولاً، ثم تُجمع النتيجة مع c
باستخدام OR (||
). للحصول على ترتيب تقييم واضح، استخدم الأقواس.
if ((a && b) || c) {
// تقييم أوضح
}
4.2 معاملات العمليات على البتات
معاملات العمليات على البتات (&
و|
و^
) تُستخدم لمعالجة البتات، ولكن ترتيب أولوياتها أقل من معاملات العمليات الحسابية أو المقارنة. لذلك عند كتابة تعبيرات معقدة، يجب الانتباه للأقواس.
int x = 5; // 0101
int y = 3; // 0011
int result = x & y; // 0001 (AND بتية)
5. أمثلة عملية للبرمجة
نقدم مثالاً على برنامج قد يتم فيه سوء فهم ترتيب الأولويات بين ||
و&&
:
#include <stdio.h>
int main() {
int a = 0, b = 1;
if (a == 0 || a == 1 && b == 0) {
printf("Truen"); // سيتم عرضها
}
return 0;
}
في هذا المثال، يتم تقييم a == 1 && b == 0
أولاً، لكن قد يؤدي ذلك إلى نتائج غير مقصودة. للحصول على نتائج دقيقة، استخدم الأقواس لتوضيح ترتيب التقييم.
if ((a == 0 || a == 1) && b == 0) {
printf("Truen");
}
6. الخلاصة
ترتيب أولويات المعاملات في لغة C ضروري لعمل البرنامج بشكل صحيح. عند التعامل مع تعبيرات معقدة، من المهم فهم الأولويات وقواعد الترابط، واستخدام الأقواس بشكل مناسب لتوضيح ترتيب التقييم. الانتباه لأولويات المعاملات يساعد في كتابة برامج أكثر أماناً وكفاءة.