Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Studies

מהו טיפוס?

כעת סוף סוף יש לנו את הכלים להגדיר מהו טיפוס.

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

  1. מקצה תא בזכרון בגודל של הטיפוס שביקשנו
  2. כותב לתא הזה את הערך הרצוי

לדוגמא, נקצה משתנה int:

int x = 65;

הקומפיילר מקצה 4 בייטים בזכרון (גודל int הוא 4 בייטים) וכותב אליהם את הערך 65, או בבינארית 1000001. כלומר, תוכן הביטים בארבעת הבייטים הוא (עם רווח בין בייט לבייט):

00000000 00000000 00000000 01000001

כדוגמא נוספת, נקצה משתנה char:

char c = 65; 

הקומפיילר מקצה בייט אחד (גודל char הוא בייט אחד) וכותב אליו את הערך 65, או 01000001. בהמשך נראה כיצד זה מתיישב עם הצהרות כמו 'char c = 'A שעשינו קודם.

Note

ההצגה הבינארית של משתנים מסוג float ו-double מעט מורכבת יותר. למשל, ההצגה הבינארית של הצהרה כגון float f = 65 היא 00000000 00000000 10000010 01000010 - זאת מכיוון שעל מנת לייצג מספרים עשרוניים הקומפיילר מפרש את הביטים אחרת ממספרים שלמים. לא נדון בכך בקורס הזה.

פירוש ערך טיפוסים בהדפסה

#include <stdio.h>
int main() {
    int x = 65;
    char c = 65; // ?
    printf("x = %d, c = %c\n", x, c);
}

בדוגמא זו הקומפיילר הקצה מקום לשני משתנים - x ו-c, וכתב לשניהם את הערך 65. למעשה, יש שתי כתובות בזכרון בהן ערך הבייטים הוא 65 (10000001 בבינארי - נסו להמיר בעצמכם!). מהי המשמעות של אתחול c ל-65? למה כשהדפסנו את c קיבלנו את התו A?

הסיבה לכך היא הטיפוס של המשתנה. ביקשנו להדפיס את הערך 65 פעם אחת כ-int כשהדפסנו את x, ופעם שנייה כ-char כשהדפסנו את c. כלומר, הקומפיילר מפרש את הערך 65 בתור התו A - מדוע? לתשובה הזו יש שאלה עמוקה - נתחיל ראשית בהמרה בין סוגי משתנים ונמשיך לצורה שבה מפרשים את המספר 65 כמשתנה char.