לדלג לתוכן

ייצוג מידע במחשב - בינארי, הקסדצימלי ועשרוני, ולמה זה בכלל חשוב

בכל פעם שאתם פותחים דיבאגר, מסתכלים על כתובת זיכרון, או קוראים דאמפ הקסדצימלי של קובץ, אתם נתקלים במספרים שנראים כמו קוד סודי. הם לא. הם פשוט דרך אחרת לכתוב בדיוק אותם מספרים שאתם כבר מכירים, רק בבסיס ספירה שונה. ברגע שמבינים את ההיגיון מאחורי זה, כל מסך מלא ב-0x שנראה מפחיד הופך למשהו קריא לגמרי.

למה מחשב בכלל סופר באפסים ואחדים

מחשב, בבסיס שלו, הוא אוסף עצום של מתגים חשמליים זעירים - טרנזיסטורים. לכל טרנזיסטור יש רק שני מצבים אפשריים: זרם עובר או לא עובר, מתח גבוה או נמוך. אין מצב ביניים אמין מספיק כדי לבסס עליו מערכת ספירה. בגלל זה, השפה הבסיסית ביותר של החומרה היא בינארית - שני ערכים, 0 ו-1, שמתאימים ישירות למצב הפיזי של כל טרנזיסטור.

כל מידע שאתם רואים במחשב, טקסט, תמונה, קובץ שמע, קוד תוכנה, בסוף מיוצג כרצף עצום של אפסים ואחדים. הביט - bit, הוא היחידה הקטנה ביותר, ושמונה ביטים ביחד מרכיבים בית - byte, שהוא היחידה הבסיסית שרוב המערכות עובדות איתה.

איך קוראים מספר בינארי

מספר עשרוני רגיל בנוי על חזקות של 10 - הספרה השמאלית ביותר במספר 243 שווה ל-2 כפול 100, בתוספת 4 כפול 10, בתוספת 3 כפול 1. מספר בינארי עובד באותו היגיון בדיוק, רק עם חזקות של 2 במקום 10. המספר הבינארי 1011 שווה ל-1 כפול 8, בתוספת 0 כפול 4, בתוספת 1 כפול 2, בתוספת 1 כפול 1 - יחד, 11 בעשרוני.

זה נשמע מסורבל, וזה באמת מסורבל כשמנסים לקרוא מספרים בינאריים ארוכים בעין. בית אחד, שמונה ביטים, יכול להיראות כמו 11010110 - רצף שקשה מאוד לזכור או להשוות במבט מהיר. וכאן נכנס ההקסדצימלי לתמונה.

הקסדצימלי - למה זה הקיצור שכל מתכנת צריך

הקסדצימלי הוא בסיס 16, עם ספרות מ-0 עד 9 ואז האותיות A עד F במקום הספרות 10 עד 15. הסיבה שהוא כל כך נוח היא לא מקרית - כל ספרה הקסדצימלית אחת מייצגת בדיוק ארבעה ביטים. זה אומר שבית שלם, שמונה ביטים, מיוצג תמיד על ידי בדיוק שתי ספרות הקסדצימליות.

אותו מספר 11010110 שהיה מסורבל לקרוא, הופך בהקסדצימלי ל-D6 בלבד - שני תווים במקום שמונה. זו לא רק נוחות ויזואלית. זה אומר שכתובת זיכרון, ערך רגיסטר, או תוכן של קובץ בינארי, כל אלה נהיים קריאים בעין הרבה יותר בכתיב הקסדצימלי מאשר בבינארי הגולמי. בכל פעם שאתם רואים כתובת כמו 0x7ffee2a1, אתם בעצם מסתכלים על ייצוג מקוצר ומדויק של רצף ביטים ארוך בהרבה.

איך עוברים בין הבסיסים בלי להתבלבל

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

להמרה מעשרוני לבינארי, השיטה הנפוצה היא חלוקה חוזרת ב-2 ורישום השארית בכל שלב, מלמטה למעלה. וכדי לעבור מהקסדצימלי לעשרוני, פשוט מכפילים כל ספרה בחזקת 16 המתאימה למיקום שלה ומחברים, בדיוק כמו שעשינו קודם עם בינארי וחזקות של 2.

בהתחלה זה דורש חישוב על נייר, אבל אחרי כמה תרגולים המוח מתחיל לזהות דפוסים נפוצים - למשל שהמספר 0xFF שווה תמיד ל-255, כי זה הערך המקסימלי שבית יחיד יכול להכיל.

איפה זה פוגש אתכם בפועל

ההבנה הזו לא נשארת תיאורטית לרגע. כתובות זיכרון בדיבאגר, קודי צבע ב-CSS, כתובות MAC של כרטיסי רשת, הרשאות קבצים בלינוקס שמוצגות כמספר כמו 755, וגם כל דאמפ בינארי שתראו בכלי הנדסה לאחור - כל אלה כתובים בבסיס 8, 16 או 2, ולא בעשרוני שאתם רגילים אליו. מי שמרגיש בנוח לזהות ולהמיר בין הבסיסים האלה, פשוט קורא את המחשב שלו בצורה טבעית יותר.

זו בדיוק אבן היסוד שאנחנו בונים עליה בקורס ליבת המחשב - מייצוג המידע הבסיסי ביותר, ועד להבנה איך המעבד באמת מבצע פעולות על הביטים האלה.

ואם אתם רוצים מישהו לבדוק אתכם באמצע ההמרות, יש קהילה שכבר עברה את זה.

הצטרפו לקהילה בדיסקורד

לסיכום

בינארי, הקסדצימלי ועשרוני הם לא שלוש שפות שונות - הם שלוש דרכים לכתוב את אותו המספר בדיוק. ברגע שמפנימים את ההיגיון של חזקות הבסיס, אפשר לעבור ביניהם בקלות, ופתאום כתובות זיכרון ודאמפים בינאריים מפסיקים להיראות כמו קוד סודי ומתחילים להיראות כמו מה שהם באמת - מספרים רגילים, כתובים קצת אחרת.