מהי קדימות אופרטור C ואסוציאטיביות

Mhy Qdymwt Wprtwr C W Swzy Tybywt



אופרטורים משמשים בדרך כלל לביצוע פעולות אריתמטיות והגיוניות שונות ב-C. שפת התכנות C עוקבת אחר סדר מסוים המכונה עדיפות מפעיל ו אסוציאטיביות לקבוע את סדר הפעולות במהלך הביצוע. הכללים של עדיפות מפעיל ו אסוציאטיביות לעזור בכתיבת קוד ללא שגיאות ולהגביר את קריאות הקוד.

מאמר זה מספק מדריך מקיף שיסייע לך ללמוד על אסוציאטיביות וקדימות מפעילים ב-C.

עדיפות מפעיל ב-C

עדיפות מפעיל מתאר את הרצף שבו מוערכים מספר אופרטורים בזמן הערכת ביטויים. לדוגמה, אם לביטוי יש גם אופרטורים של חיבור וגם כפל, איזה מהם יש להעריך קודם? התשובה פשוטה, C עוקב אחר כללים מסוימים כדי לפתור אי בהירות כזו, הידוע בכינויו עדיפות מפעיל . ב-C, עדיפות מפעיל מסווג ל-17 רמות, החל מאופרטורים לא-נריים ועד לאופרטור מותנה שליש. רוב האופרטורים בשימוש כמו אופרטורים אריתמטיים, אופרטורים יחסיים, אופרטורים לוגיים ואופרטורים סיביים פועלים לפי תקן C עדיפות מפעיל נוהל.







עֲדִיפוּת כללים מכתיבים לאילו אופרטורים יש עדיפות גבוהה יותר מאחרים בעת הערכת ביטויים. למספר סוגים של אופרטורים בשפת התכנות C יש דרגות שונות של עֲדִיפוּת . לדוגמה, לאופרטורים אונריים יש עדיפות גבוהה יותר מאופרטורים בינאריים. להלן רשימה של אופרטורים ממוינים בסדר עולה של עֲדִיפוּת :



מַפעִיל המשמעות של מפעיל אסוציאטיביות
()
[]
->
.
שיחה פונקציונלית

הפניה לרכיבי מערך



בחירת חברים עקיפה





בחירת חברים ישירה

משמאל לימין
!
~
+

++

&
*
מידה של
(סוּג)
שלילה לוגית

משלים Bitwise (1's).

Unary plus

מינוס לא נורמלי

תוֹסֶפֶת

ירידה

הפניה (כתובת)

הפניה למצביע

מחזירה את הגודל של אובייקט

Typecast (המרה)

מימין לשמאל
*
/
%
לְהַכפִּיל

לחלק

היתרה

משמאל לימין
+
בינארי פלוס (תוספת)

מינוס בינארי (חיסור)

משמאל לימין
<<
>>
שמאל משמרת

העברה ימינה

משמאל לימין
<
<=
>
>=
פחות מ

פחות מ או שווה

גדול מ

גדול או שווה

משמאל לימין
==
!=
שווה ל

לא שווה ל

משמאל לימין
& Bitwise AND משמאל לימין
^ OR בלעדי קצת משמאל לימין
| Bitwise OR משמאל לימין
&& AND הגיוני משמאל לימין
|| OR לוגי משמאל לימין
?: מפעיל מותנה מימין לשמאל
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
משימה פשוטה

הקצה מוצר

הקצה מנה

הקצה שארית

להקצות סכום

הקצה הבדל

הקצה AND

הקצה XOR בצורה סיבית

הקצה OR

הקצה משמרת שמאלה

הקצה משמרת ימינה

מימין לשמאל
, מפריד ביטויים משמאל לימין

כללים אלה מנחים את המהדר כיצד להעריך ביטויים עם מספר אופרטורים באותו ביטוי. לאופרטור הכפל, למשל, יש עדיפות גדולה יותר מאופרטור החיבור במשוואה A + B * C, בהתאם ל- עֲדִיפוּת כללים. לכן, המהדר יעריך תחילה את הביטוי B * C לפני הוספת A לתוצאה.

בואו נסתכל על דוגמה של עדיפות מפעיל באמצעות קוד.

#include

int רָאשִׁי ( ) {

int א = 43 , ב = אחד עשר , ג = 16 , ד = 31 ;

int תוֹצָאָה = ++ א * ב -- + ג / -- ד ;

printf ( 'a = %d \n ' , א ) ;

printf ( 'b = %d \n ' , ב ) ;

printf ( 'c = %d \n ' , ג ) ;

printf ( 'd = %d \n ' , ד ) ;

printf ( 'תוצאה = %d \n ' , תוֹצָאָה ) ;

לַחֲזוֹר 0 ;

}

ארבעת המשתנים a, b, c ו-d, מוצהרים בקוד לעיל, והערכים ההתחלתיים שלהם הם 43, 11, 16 ו-31 בהתאם. לאחר מכן, הוא מחיל מגוון של אופרטורים אריתמטיים והקצאה על משתנים אלה בביטוי. הביטוי מגדיל את הערך של a על ידי שימוש באופרטור לפני ההגדלה ++a, מכפיל את התוצאה באופרטור שלאחר ההפחתה b–, ולאחר מכן מוסיף את התוצאה לחלוקה של c בערך שהופחת מראש של d. (באמצעות האופרטור pre-decrement –d). התוצאה המשתנה משמשת לאחר מכן כדי להחזיק את התוצאה הכוללת של ביטוי זה.

תְפוּקָה

אסוציאטיביות ב-C

אסוציאטיביות מתייחס לסדר שבו האופרטורים מוערכים במהלך ביטוי עם אותה קדימות. משמאל לימין ומימין לשמאל אסוציאטיביות הן שתי צורות האסוציאטיביות ב-C. אם לשני אופרטורים יש אותו הדבר עֲדִיפוּת , הם מוערכים משמאל לימין לפי הרעיון של שמאל לימין אסוציאטיביות . עם זאת, אם נצפתה אותה קדימות, האופרטורים מוערכים מימין לשמאל לפי ימין לשמאל אסוציאטיביות .

לדוגמה, לאופרטור ההגדלה ++ יש מימין לשמאל אסוציאטיביות , כלומר התוספת מַפעִיל מוערך לאחר המשתנה. ואילו ה-AND ההגיוני מַפעִיל יש משמאל לימין אסוציאטיביות , כלומר האופרטור מוערך משמאל לימין.

#include

int main() {

int a = 6 , ב = 3 , ג = 2 ;

int result = a * b / c;

printf( 'תוצאה = %d \n ' , תוצאה);

לַחֲזוֹר 0 ;

}

שלושת המשתנים a, b ו-c מוכרזים בקוד זה, והם מאותחלים ל-6, 3 ו-2 בהתאמה. לאחר מכן, הוא מחיל פעולות כפל וחילוק על משתנים אלה בביטוי. הכפל והחילוק מדורגים משמאל לימין ב-C על סמך שלהם אסוציאטיביות מכיוון שיש להם אותה רמת עדיפות. זה מצביע על כך שפעולת החלוקה באה במקום הראשון, ואחריה פעולת הכפל בעת הערכת הביטוי, a * b / c.

תְפוּקָה

סיכום

עדיפות מפעיל ו אסוציאטיביות הם מושגים מכריעים בתכנות C שעוזרים לקבוע את סדר הביצוע של ביטויים. מפעילים עם הגבוהים ביותר עֲדִיפוּת רמת מוערכים תחילה ו אסוציאטיביות כללים עוזרים לקבוע את הסדר כאשר משתמשים במספר אופרטורים עם אותה קדימות. הֲבָנָה עדיפות מפעיל ו אסוציאטיביות הוא חיוני בעת תכנון תוכניות מורכבות, והוא עוזר לייצר קוד נקי ויעיל יותר עם פחות שגיאות.