Professional Documents
Culture Documents
נושא 5- קבצים, פעולות על ביטים ו-Preprocessor
נושא 5- קבצים, פעולות על ביטים ו-Preprocessor
דוגמא נוספת לשימוש ב #-על מנת לכתוב פעולות שיתבצעו בשלב הקדם-עיבוד
זה שמגדירים קבועים .בתחילת התוכנית ניתן להגדיר כלשהו שם שיכיל ערך
מסוים )למשל ערך מספרי( ,והחל מאותה הנקודה כל פעם ששם זה יופיע אז זה
בעצם כאילו כתוב שם את אותו ערך שייחסו לו .באופן דומה ניתן על ידי פקודה
בשלב מסוים לבטל הגדרה כזו של שם לערך מסוים .בפועל מה שקורה בעת
קביעה שכזו ,זה שאם למשל הגדרנו קבוע Piעם הערך ,3.14בשלב הקדם -עיבוד
ה Preprocessor-יחליף כל מופע של המחרוזת Piבערך המספרי ,3.14וכשנגיע לשלב
הקומפילציה זה כבר מה שהקומפיילר יראה.
במקרה יותר מורכב ניתן להגדיר מאקרו ,שזה כמו להגדיר מראש פונקציה.
למשל בדוגמא שמובאת פה ,כל פעם שה Preprocessor-יראה את המחרוזת
)𝑥(𝑄𝑆 )עם כלשהו ארגומנט 𝑥 ,מה שהקומפיילר בעצם יראה זה את
ה מ ח ר ו ז ת 𝑥 ⋅ 𝑥 ,ו ה ו א י ק מ פ ל א ו ת ה ב ה ת א ם .
חשוב לשים לב שלהגדיר מאקרו זה לא שקול בכלל ללהגדיר פונקציה .כאשר אנחנו מגדירים מאקרו זה כמו להגדיר מימוש
של ״העתק-הדבק״ לא מתוחכם במיוחד שמשנה את מה שהקומפיילר יראה כאשר הוא יתקל בביטוי שרשמנו .צריך להיזהר
עם זה כדי שלא ייווצרו שגיאות.
שפת 𝐶 גם מכילה מספר מאקרוים מוגדרים מראש ,שנוכל לרשום אותם ישירות בתוכנית שלנו בלי להגדיר אותם ומה
שהקומפיילר יראה זה את הערך המיוחד שהם מייצגים.
קבצים -הרבה פעמים נרצה לקרוא קבצים ולהשתמש בהם בתוכנית או לכתוב מהתוכנית לקבצים חיצוניים.
על מנת שנוכל לקרוא ולכתוב וקבצים ,נצטרך לעבוד עם מצביע לקובץ ולפתוח אותו בתחילת השימוש ולאחר מכן לסגור
אותו.
פעולות -Bitwiseפעולות שעובדות על הייצוג הבינארי של משתנים ,ולא על הערך המספרי שלהם.
למשל ,בדוגמא הבאה הגדרנו שני משתנים ,האחד עם ערך 33333והשני עם ערך .−77777כעת פעולות ה Bitwise-לא
יתייחסו לערכים מספריים אלו של המשתנים אלא יתייחסו לייצוג ה ב י נ א ר י ש ל כ ל מ ס פ ר ב ז י כ ר ו ן ש ל ה מ ח ש ב :
למשל בשורה השלישית ,מה שאנחנו מבצעים זה פעולת ANDלוגית ביט מול ביט במחרוזות של המספרים .המספר שייווצר
בסוף ,32805 ,אין לו שום קשר לערכים המספריים שראינו בהתחלה למשתנים ,אלא הוא פשוט המספר שהייצוג הבינארי
שלו זה מה שמתקבל מפעולת Bitwise-Andעל שתי המחרוזות.
השורה הרביעית מתארת פעולת 𝑅𝑂𝑋 ,החמישית ,Orהשישית משתמש גם ב Not -וכדומה.
נזכור כי בייצוג הבינארי של מספרים בזיכרון המחשב משתמשים בשיטת המשלים ל .2-לפי שיטה זו ,אם הביט השמאלי
ביותר של המחרוזת הוא ״1״ אז המחרוזת מייצגת מספר שלילי ואם הוא ״0״ אז היא מייצגת מספר חיובי.
נזכור כי כל הזזה שמאלה מייצגת הכפלה של הערך המספרי של המחרוזת פי ,2וכל הזזה ימינה מייצגת הכפלה של הערך
!
ה מ ס פ ר י ש ל ה מ ח ר ו ז ת פ י ".