לדלג לתוכן

0.5 ייצוג בינארי מתקדם הרצאה

יחידות אחסון

המחשב שומר הכל כביטים. כדי לייעל את העבודה עם כמויות גדולות של ביטים, מקובלות יחידות מידה:

  • 1 בייט (Byte) = 8 ביטים

  • 1 קילובייט (KB) = 1024 בייטים

  • 1 מגהבייט (MB) = 1024 קילובייטים

  • 1 גיגהבייט (GB) = 1024 מגהבייטים

  • 1 טרהבייט (TB) = 1024 גיגהבייטים

למה 1024 ולא 1000? בגלל שהמחשב פועל בבסיס 2, ו־1024 = 2¹⁰.

הקסדצימלי (Hexadecimal)

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

מספרים הקסדצימלים, הם מספרים עם 16 סוגים שונים של ספרות. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
היתרון בהקס, שכל ספרה בהקס- בגלל שניתן לייצג 16 ערכים שונים- אם נקביל לבינארית, נוכל לייצג 4 ביטים שונים בספרה אחת.

Hex Binary
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

לדוגמה: 0x3A = 0011 1010

הEndianness

נהוג לחלק את הRAM שלנו לבייטים.
נזכיר שכדי לשמור מספר גדול בזכרון, אנחנו צריכים להשתמש בהרבה בייטים.
כאשר מאחסנים מספר בזיכרון שהוא גדול מבייט אחד, עולה השאלה: איזה בייט מגיע ראשון בזיכרון?
לדוגמה, נניח שהמספר 0x12345678 מאוחסן בזיכרון:
כפי שלמדנו בהקס, כל 2 ספרות בהקס הן בייט אחד.
אז האם בRAM המספר ישמר בצורה כזו:
Pasted image 20250615231230.png
או הפוך,
Pasted image 20250615231311.png

  • לפי שיטת Little Endian – הבייט הפחות משמעותי (LSB) נשמר קודם

  • לפי שיטתBig Endian – הבייט המשמעותי יותר (MSB) נשמר קודם

כלומר,

  • Little Endian:

    Address:    0x00   0x01   0x02   0x03
    Value:      0x78   0x56   0x34   0x12
    

  • Big Endian:

    Address:    0x00   0x01   0x02   0x03
    Value:      0x12   0x34   0x56   0x78
    

    כל מעבד משתמש בשיטה שונה.

Signed ו־Unsigned

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

Unsigned

מספר unsigned הוא מספר שהוא תמיד חיובי.
כלומר, מספר unsigned עם 8 ביטים (בייט)- ערכו נע בין 1-256

Signed

לעומת זאת, מספר signed יכול להיות חיובי או שלילי.
אם המספר הוא 8 ביטים- הטווח הוא -128 עד 127.
הביט האחרון בבייט מסמן אם המספר שלילי או לא,
לדוגמה:

00000001 = 1
11111111 = -1
10000000 = -128
01111111 = 127

שיטה זו מאפשרת חיבור בין מספרים חיוביים ושליליים בלי טיפול מיוחד.

שיטת Floating Point (נקודה צפה)

שיטת נקודה צפה (Floating Point) היא דרך לייצג מספרים עשרוניים (מספרים עם חלק שבר עשרוני, כמו 3.14 או -0.125) בזיכרון מחשב. מכיוון שהמחשב עובד עם ביטים בלבד, הוא צריך דרך לדמות ייצוג של מספרים כאלה בצורה קומפקטית, כללית ומדויקת ככל האפשר.

מבנה כללי - IEEE 754 (32 ביט)

Sign (1) Exponent (8) Mantissa (23)
S E M
  • הSign (1 ביט): קובע אם המספר חיובי (0) או שלילי (1).

  • הExponent (8 ביטים): מייצג את החזקה של 2 שבה כופלים את המספר. הוא מוסט (biased), כלומר לא נשמר כמו שהוא.

  • הMantissa (23 ביטים): מייצגת את הספרות המשמעותיות של המספר (החלק הממשי). יש ביט מוסתר (implicit bit) בתחילת המספר והוא תמיד 1 (אלא אם מדובר ב־0).

Bias – הטיית המעריך

כדי לאפשר גם מעריכים שליליים וגם חיוביים, לא שומרים את המספר כמו שהוא, אלא מוסיפים לו Bias של 127.
למשל:

  • מעריך 0 → נשמר כ־127 (01111111)

  • מעריך 2 → נשמר כ־129 (10000001)

  • מעריך -3 → נשמר כ־124 (01111100)

דוגמה מלאה:

נייצג את המספר 6.5 בבינארי:

  1. הייצוג הבינארי של 6.5 הוא:
    110.1 → מומר לצורה נורמלית (מדעית בבסיס 2):
    1.101 × 2^2

  2. סימן: חיובי → S = 0

  3. מעריך: 2 → עם bias 127 → 2 + 127 = 129
    בבינארי: 10000001

  4. Mantissa: לוקחים את הספרות אחרי הנקודה מהייצוג 1.101, כלומר 101000... ומשלימים ל־23 ביטים
    10100000000000000000000

  5. הייצוג הסופי:
    0 10000001 10100000000000000000000

  6. שחזור הערך מתוך המבנה:

  7. Sign = 0 → חיובי

  8. Exponent = 129 → 129 − 127 = 2

  9. Mantissa = 1.101
    +1.101 × 2^2 = 6.5

יתרונות וחסרונות

  • מאפשר לייצג מספרים קטנים מאוד וגדולים מאוד בצורה יעילה.

  • הדיוק מוגבל – יש איבוד מידע במספרים עשרוניים מסוימים (למשל 0.1 לא ניתן לייצוג מדויק בבינארי).

התקן הASCII - ייצוג תווים

כדי לייצג תווים בבינארית ולשמור תווים במחשב, עלינו ליצור דף התקן שמגדיר כל תו, וערכו בבינארית.
תקן הASCII (ראשי תיבות של American Standard Code for Information Interchange) הוא תקן בן 7 ביטים (היום מורחב ל־8) שממפה בין תווים לבין מספרים שלמים. כל תו – אות, ספרה, סימן פיסוק או תו מיוחד – מקבל ערך מספרי קבוע. זוהי הדרך בה המחשב מייצג טקסטים.

לדוגמה:

תו ייצוג בינארי הקסדצימלי
A 01000001 0x41
B 01000010 0x42
a 01100001 0x61
1 00110001 0x31
! 00100001 0x21
\n 00001010 0x0A
  • כל תו = 8 ביטים = בייט אחד

  • טקסט שלם = מערך של בייטים ברצף (string)

  • תווים בעברית לא קיימים ב־ASCII המקורי, ונדרשים תקנים אחרים כמו UTF-8.

לדוגמה, המילה "Hi" מיוצגת בזיכרון כך:

01001000 01101001
H         i

ניתן לקרוא כל טקסט על ידי מעבר על כל בייט בפס הזיכרון ותרגומו לפי טבלת ASCII.

ייצוג הוראות בבינארית

כמו שהמחשב מייצג מספרים ומידע בבינארית, הוא עושה זאת גם עם הוראות (הקוד).
למשל,
0001 -> יכול להיות הוראת mov
0010 -> יכול להיות הוראת add
וכך הלאה.
המעבד יודע לקחת את ההוראה מהRAM, (לעשות FETCH)
המעבד יודע לפענח את ההוראה, (לעשות DECODE)
והמעבד יודע לבצע אותה, לדוגמה- עם שליחה למגנון הרלוונטי בALU (לעשות EXECUTE)