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