27-11-2004, 18:46
|
|
|
חבר מתאריך: 20.12.01
הודעות: 20,962
|
|
וכעת הוכחה מהירה שהקוד באמת פועל:
הגדרת הפעולה xor:
לפני שנמשיך, חשוב לתאר את הפעולה הזו בדרך מילולית שתעזור לנו להבין למה הקוד ההוא פעל.
אם נסתכל למשך יותר משבריר שניה על הטבלה נראה ש-xor בודקת האם שני הפרמטרים שלה
זהים או שונים. אם הם זהים היא מחזירה 0 ואם הם שונים היא מחזירה 1.
השלב הבא הוא להבין מהי משמעות הפעולה xor עבור משתנים שונים בקוד שלנו, לאו דווקא ביטים.
המשמעות היא פשוטה מאוד והגיונית מאוד, מבוצע xor בין כל שני ביטים במקום מסויים והתוצאה
היא ערך ה-xor במשתנה היעד.
לדוגמה:
מבצעים xor של הביט הראשון בפרצטר הראשון עם הביט הראשון בפרמטר השני, וזהו הביט
הראשון בתוצאה. מבצעים xor של הביט השני בפרצטר הראשון עם הביט השני בפרמטר השני,
וזהו הביט השני בתוצאה, וכך הלאה:
עכשיו, אנחנו לא צריכים הרבה כדי להוכיח שהקוד פועל: מספיק שנראה שהוא פועל עבור ביטים
בודדים, ומכאן נובע באופן ישיר שהוא פועל עבור משתנים מכל סוג ומכל אורך - הרי ראינו ש-xor
עבור משתנים בכל אורך שהוא היא פעולה רק על הביטים באותו מקום של שני הפרמטרים ושל
התוצאה.
עכשיו, הקוד:
עכשיו בואו ננתח את הקוד בהתאם לארבעת המצבים השונים האפשריים עבור ערכים תחיליים
של שני הפרמטרים, A ו-B:
נתחיל מ-B=1, ונראה מה הולך פה. אם גם A=1, אז אחרי השורה הראשונה A=0; אחרי השורה
השניה B=1; ואחרי השורה השלישית שוב A=1. אם A=0 אז אחרי השורה הראשונה A=1; אחרי
השורה השניה B=1; ואחרי השורה השלישית A=0.
אם נעשה את אותה בדיקה עבור שני המקרים האחרים נראה שהקוד באמת "מחליף" את הערכים
של שני הפרמטרים, ועפ"י הגדרת הפעולה xor עבור משתנים השונים מביט-בודד, אנחנו רואים
שזה יפעל תמיד.
|