שפת C| סדר קדימויות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שפת C| סדר קדימויות


Dolmiti

Recommended Posts

האופרטור ++ קודם מחזיר את הערך הנוכחי של a ואח"כ מקדם אותו. מעבר לזה סדר הקדימויות הוא לפי סוג האופרטור ומשמאל לימין במקרה של שוויון בקדימויות, האופרטור = הוא אחרון כמובן.

סדר הקדימויות מחולק לשלבים:

step 1:
a = 2
c = a++ * a++

step 2:
c = 2 * a++
a = 3

step 3:
c = 2 * 3
a = 4

 

קישור לתוכן
שתף באתרים אחרים

http://en.cppreference.com/w/c/language/operator_precedence

 

b=1 כי אופרטור ה-postincrement קודם מחזיר את הערך הנוכחי של a ז"א 1 ומהרגע שהאופרטור החזיר ערך אז זה כבר קבוע זה כבר לא המשתנה a אלא ממש המספר אחד. אחר כך מקדמים את a ואז את האופרטור שווה = על מה שיש עכשיו בצד ימין של הפעולה שזה כאמור הערך הקבוע אחד.

קישור לתוכן
שתף באתרים אחרים

אוקיי. כעת ברור. ממש תודה!

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

קישור לתוכן
שתף באתרים אחרים

בטבלה שהבאתי יש שני סוגים של ++ כל אחד מהם מתבצע לכיוון שונה, בטבלה שלך האופרטור postincrement בכלל לא מופיע. הטבלה שהבאתי מבוססת גם על תקנים יותר חדשים של שפת c כמו שכתוב למטה אבל אני די בטוח שבכל מקרה סדר פעולות החשבון לא השתנה ככה שזה לא משנה איזה גרסה של שפת c תבחר.

קישור לתוכן
שתף באתרים אחרים

פעולת ה: x++ עובדת קצת אחרת כי היא מקדמת את x ואז מחזירה את x עצמו.

מעבר לזה עושה רושם שאתה כבר נכנס לדקויות שלפי http://en.cppreference.com/w/c/language/eval_order הם Undefined behavior וכל קומפילר רשאי לעשות מה שבא לו.

 

מה שנראה שקורה זה:

int x = 1;
int y = ++x * x++;

1. y = x * x++
    x = 2
2. y = x * 2
    x = 3
3. y = 3 * 2

 

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...