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

שפת c - סדר קדימויות


ronen062013

Recommended Posts

אם אופרטורים ++ ואפילו  && קודמים ל || אז למה בתכנית הבאה הביטויים סביב && כלל לא רצים והתשובה מתקבלת רק מאגף שמאל של הביטוי הארוך?

int i=2, j=2, k=2, m;
m = ++i ||  ++j&&++k;
printf("%d %d %d %d", i, j, k ,m);

            /*answer: 3 2 2 1 */

 

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

קדימות של אופרטורים רק אומר שמה שמתבצע לוגית זה:

++i ||  (++j && ++k)

ולא זה:

(++i ||  ++j) && ++k

הסיבה לתוצאה שאתה מקבל היא שבאופרטורים || ו-&& קודם מחשבים את הצד השמאלי של הביטוי ורק אם צריך אז מחשבים את הצד הימני, כיוון שפה מתקבל שלא צריך אז לא מחשבים את הצד הימני כלל.

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

אופרטורים בתכנות זה לא בדיוק כמו במתמטיקה, מה שחשוב זה התוצאה הסופית (שבמקרה זה נכנסת ל-m) ולא רוצים שהמחשב סתם יבזבז זמן בחישובים מיותרים שלא משפיעים על התוצאה.

 

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

https://en.wikipedia.org/wiki/Short-circuit_evaluation

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

ארכיון

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

×
  • צור חדש...