ronen062013 פורסם 2020 בפברואר 2 Share פורסם 2020 בפברואר 2 אם אופרטורים ++ ואפילו && קודמים ל || אז למה בתכנית הבאה הביטויים סביב && כלל לא רצים והתשובה מתקבלת רק מאגף שמאל של הביטוי הארוך? 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 */ קישור לתוכן שתף באתרים אחרים More sharing options...
etal פורסם 2020 בפברואר 2 Share פורסם 2020 בפברואר 2 קדימות של אופרטורים רק אומר שמה שמתבצע לוגית זה: ++i || (++j && ++k) ולא זה: (++i || ++j) && ++k הסיבה לתוצאה שאתה מקבל היא שבאופרטורים || ו-&& קודם מחשבים את הצד השמאלי של הביטוי ורק אם צריך אז מחשבים את הצד הימני, כיוון שפה מתקבל שלא צריך אז לא מחשבים את הצד הימני כלל. קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2020 בפברואר 2 מחבר Share פורסם 2020 בפברואר 2 לא הבנתי. אם סדר קדימויות אומר שזה יתפרש ככה אז למה הבטוי בסוגריים לא מחושב לפני הביטוי מחוץ לסוגריים? ++i || (++j && ++k) קישור לתוכן שתף באתרים אחרים More sharing options...
etal פורסם 2020 בפברואר 2 Share פורסם 2020 בפברואר 2 אופרטורים בתכנות זה לא בדיוק כמו במתמטיקה, מה שחשוב זה התוצאה הסופית (שבמקרה זה נכנסת ל-m) ולא רוצים שהמחשב סתם יבזבז זמן בחישובים מיותרים שלא משפיעים על התוצאה. כמו שכבר אמרתי באופרטור הזה מחשבים קודם את הצד השמאלי ורק אם צריך אז מחשבים את הימני, אתה יכול לנסות לקרוא על זה יותר בוויקיפדיה למרות שאני לא בטוח מה תבין מההסברים שלהם: https://en.wikipedia.org/wiki/Short-circuit_evaluation קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2020 בפברואר 2 מחבר Share פורסם 2020 בפברואר 2 הבנתי! תודה רבה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.