عوامل C

مقدمة لمشغلي C وأسبقية المشغل

تقدم لنا C مجموعة متنوعة من المشغلين يمكننا استخدامها للعمل على البيانات.

على وجه الخصوص ، يمكننا تحديد مجموعات مختلفة من المشغلين:

  • العمليات الحسابية
  • عوامل المقارنة
  • العوامل المنطقية
  • عوامل التخصيص المركبة
  • عوامل البت
  • المؤشرالعاملين
  • مشغلي الهيكل
  • عوامل متنوعة

في منشور المدونة هذا ، سأفصل كل منهم ، باستخدام متغيرين تخيليينaوbكأمثلة.

أنا أبقي مشغلي البتات ، ومشغلي البنية ، ومشغلي المؤشرات خارج هذه القائمة ، حيث سأخصص لهم منشور مدونة معين.

العمليات الحسابية

في مجموعة الماكرو هذه ، سأفصل بين العوامل الثنائية والعوامل الأحادية.

تعمل العوامل الثنائية باستخدام معاملين:

المشغل أو العامل اسم مثال
= مهمة a = b
+ إضافة a + b
- الطرح a - b
* عمليه الضرب a * b
/ قسم a / b
% مودولو a % b

تأخذ العوامل الأحادية معاملاً واحدًا فقط:

المشغل أو العامل اسم مثال
+ أحادي زائد +a
- أحادي ناقص -a
++ زيادة راتب a++أو++a
-- إنقاص a--أو--a

الفرق بينa++و++aهل هذاa++يزيدaمتغير بعد استخدامه.++aيزيدaمتغير قبل استخدامه.

على سبيل المثال:

int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */

الأمر نفسه ينطبق على عامل التناقص.

عوامل المقارنة

المشغل أو العامل اسم مثال
== عامل تشغيل متساوي a == b
!= عامل لا يساوي a != b
> أكبر من a > b
< أقل من a < b
>= أكبر من أو يساوي a >= b
<= اقل او يساوي a <= b

العوامل المنطقية

  • !NOT (مثال:!a)
  • &&و (مثال:a && b)
  • ||أو (مثال:a || b)

هذه العوامل رائعة عند العمل بقيم منطقية.

عوامل التخصيص المركبة

هذه العوامل مفيدة لإجراء مهمة وفي نفس الوقت إجراء عملية حسابية:

المشغل أو العامل اسم مثال
+= مهمة الإضافة a += b
-= احالة الطرح a -= b
*= مهمة الضرب a *= b
/= مهمة التقسيم a /= b
%= مهمة Modulo a %= b

عوامل تشغيل متنوعة

العامل الثلاثي

العامل الثلاثي هو العامل الوحيد فيجيعمل مع 3 معاملات ، وهي طريقة قصيرة للتعبير عن الشرطية.

هكذا تبدو:

<condition> ? <expression> : <expression>

مثال:

a ? b : c

لوaيتم تقييمه إلىtrue، ثمbيتم تنفيذ البيان ، وإلاcيكون.

يعتبر العامل الثلاثي من الناحية الوظيفية هو نفسه الشرطي if / else ، إلا أنه أقصر للتعبير عنه ويمكن تضمينه في تعبير.

حجم

الsizeofيُرجع عامل التشغيل حجم المعامل الذي تمرره. يمكنك تمرير متغير أو حتى نوع.

استخدام المثال:

#include <stdio.h>

int main(void) {
  int age = 37;
  printf("%ld\n", sizeof(age));
  printf("%ld", sizeof(int));
}

أسبقية المشغل

مع كل تلك العوامل (وأكثر من ذلك ، والتي لم أقم بتغطيتها في هذا المنشور ، بما في ذلك مشغلي أحاديات البنية ومشغلي المؤشرات) ، يجب علينا الانتباه عند استخدامها معًا في تعبير واحد.

افترض أن لدينا هذه العملية:

int a = 2;
int b = 4;
int c = b + a * a / b - a;

ما هي قيمةc؟ هل نحصل على الجمع قبل الضرب والقسمة؟

هناك مجموعة من القواعد التي تساعدنا في حل هذا اللغز.

بالترتيب من أقل أسبقية إلى أسبقية ، لدينا:

  • ال=مهمة تشغيل
  • ال+و- الثنائيةالعاملين
  • ال*و/العاملين
  • ال+و-عوامل أحادية

لدى المشغلين أيضًا قاعدة ترابطية ، والتي تكون دائمًا من اليسار إلى اليمين باستثناء المشغلين الأحاديين والتعيين.

في:

int c = b + a * a / b - a;

ننفذ أولاa * a / b، والتي يمكن الفصل بينها نظرًا لكونها من اليسار إلى اليمينa * aوالنتيجة/ b:2 * 2 = 4و4 / 4 = 1.

ثم يمكننا إجراء الجمع والطرح: 4 + 1 - 2. قيمةcيكون3.

ومع ذلك ، في جميع الحالات ، أود التأكد من أنك تدرك أنه يمكنك استخدام الأقواس لتسهيل قراءة أي تعبير مشابه وفهمه.

الأقواس لها أولوية أعلى على أي شيء آخر.

يمكن إعادة كتابة تعبير المثال أعلاه على النحو التالي:

int c = b + ((a * a) / b) - a;

ولا يتعين علينا التفكير في الأمر كثيرًا.

تحميل مجانيكتيب C


المزيد من دروس clang: