לדלג לתוכן

0.3 מושגי בסיס הרצאה

איך המחשב שומר מידע?

  • לפני שנצלול לרשתות מחשבים ואיך מחשבים מעבירים מידע אחד לשני, נדבר על איך המחשב שומר מידע.

  • כל המידע במחשב נשמר בסופו של דבר כמות של ביטים. כל ביט הוא יחידת המידע הקטנה ביותר, והוא יכול להיות אחד מתוך שני ערכים אפשריים: 0 או 1.

  • בית הוא רצף של 8 ביטים. כל ביט יכול להיות 0 או 1, ולכן כל בית יכול להיות אחד מתוך 256 ערכים שונים (2 בחזקת 8).

  • כאשר אנחנו רוצים לשמור מידע יותר מורכב, כמו מספרים, אותיות או תמונות, המחשב משתמש בתים (כמה ביטים) כדי לייצג זאת.

    • מספר דצימלי הוא מערכת ספירה שבה יש 10 ספרות: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. זו המערכת שאנחנו משתמשים בה ביום-יום.
    • מספר בינארי הוא מערכת ספירה שמבוססת על שני ספרות בלבד: 0 ו-1. כל ספרה במערכת זו נקראת ביט. המספרים הבינאריים נבנים על ידי הצגת כל מספר כצירוף של ביטים.
    • לדוגמה, אם נרצה לשמור את המספר הדצימלי 123 במחשב נצטרך למצוא דרך להמיר בין מספרים דצמלים למספרים בינאריים. למזלנו, פיתחו שיטה שעושה זאת, והמחשב משתמש בה כדי לשמור מספרים.
  • המספר הדצימלי 123 יהיה מיוצג בבינארי כ: 1111011. כל ביט במערכת הבינארית מייצג חלק מהמספר, וההמרה מתבצעת לפי חישוב מערכתי:
    1 × 2⁶ + 1 × 2⁵ + 1 × 2⁴ + 1 × 2³ + 0 × 2² + 1 × 2¹ + 1 × 2⁰ = 123.

  • אם נרצה לשמור את אותיות כמו האות "A", המחשב לא שומר אותה ישירות כ-"A", אלא מתרגם אותה לייצוג בינארי בעזרת טבלת קידוד כמו ASCII או UTF-8.

    • טבלת קידוד היא טבלה שמכילה קשר בין האות או הסימן שאותו רוצים לייצג למספר כלשהו. וכך אפשר לשמור במחשב סימנים ואותיות למשל על גבי מספרים בינאריים.
    • למשל ב-ASCII, האות "A" מיוצגת על ידי הבית הבינארי 01000001. אם המחשב רוצה לשמור את האות, הוא ייצג אותה בעזרת 8 ביטים.
    • שיטות קידוד נוספות כמו UTF-8 מאפשרות לתמוך במגוון רחב של סימנים, כולל אותיות בעברית, סינית, ותווים מיוחדים.
    • ככה המחשב שומר את כל המידע: כל אות, מספר, תמונה או קובץ מקודדים לביטים, והם מאוחסנים בזיכרון המחשב.

בקצרה, ביט הוא היחידה הבסיסית ביותר של מידע (0 או 1), ובית הוא קבוצה של 8 ביטים שנועדה לייצג ערכים שונים.

הקדמה - בתים בפייתון

יצוג

  • דיברנו על כך שכל המידע במחשבים נשמר בסוף בביטים - (0 ו-1-ים), ועל כך אם אנחנו רוצים לשמור מספרים, מחרוזות וקבצים במחשב אנחנו צריכים למצוא דרך לתרגם בין ביטים למידע שאנחנו רוצים לשמור.
  • קיימים חישובים מתמטים כדי לתרגם בין ביטים, למספרים ואני לא רוצה להיכנס לאיך הם עובדים, כי אני חושב שהם פחות רלוונטים - בפייתון אפשר באמצעות הפונקציה bin לתרגם בין מספר דצימלי (מספר עם 10 ספרות) למספר בינארי (מספר שמורכב מ0 ו-1, כמו בביטים) כך:
    Pasted image 20240706165024.png
  • הפונקציה int יודעת לתרגם מחרוזת של מספר בינארי למספר דצימלי כך:
    Pasted image 20240706165235.png

הקס - hex

  • הקס זה דרך לייצג ספרות שמיצגות 16 ערכים שונים: הנה הספרות השנות בהקס: 0123456789ABCDEF,
    כמו שמספרים דצימלים הן מספר בין 0-9 (10 ערכים שונים), מספרים בינארים הם מספרים בין 0-1 (2 ערכים שונים) אז מספרים הקסדצימלים הם מספרים בין0-9 ובין A-F , כך שהם עם 16 ערכים שונים.
  • משתמשים בדרך כלל בהקס כדי לייצג בית - דרוש שני ספרות הקס כדי לייצג בית, בגלל ש 2 בחזקת 8 (בית אחד בבינארית) שווה ל16 בחזקת 2 (בית אחד בהקסדצימלית). אבל החישוב המתמטי הזה לא חשוב, הדבר החשוב אתם צריכים לזכור הוא שבאמצעות הקס, אפשר עם שני ספרות בלבד לסמל את כל הערכים של בית (מספר בין 0 ל-256.)
    הפונקציה hex יודעת להמיר בין מספר דצימלי למספר hex:
    Pasted image 20240706171001.png
    הפונקציה int יודעת להמיר בין מספר הקס למספר דצימלי כך:
    Pasted image 20240706171057.png
    שימו לב שנהוג לייצג מספרי הקס עם 0x בהתחלה.

קידוד מחרוזות

  • כדי לתרגם מחרוזת לביטים זה קצת יותר קשה, ותהליך הזה נקרא קידוד.
  • לרוב הדרך שבה אנחנו מקדדים מחרוזות לבתים זה באמצעות ASCII
  • שיטת ASCII היא שיטה שמציינת שלכל סימן, מספר ואות באנגלית יש ערך בבתים על פי טבלה מוגדרת. הטבלה זו שממירה בין הערכים לסימנים נקראת טבלת ASCII
    ASCII-Table-wide.svg.png
  • בטבלה זו, אפשר לראות שהdecimal מכיל את מספר, וchar מכיל את הסימן שאותו המספר מייצג.
  • הטבלה מכילה רק 127 ערכים שונים, אז אפשר לייצג כל סימן בascii באמצעות בית אחד.
  • בascii קיים גם ערך מיוחד לירידת שורה (/n), לטאב (/t), ואפילו סיום מחרוזת (/0)
  • אז מחרוזת של 10 אותיות באנגלית, יכולה להיות מומרת ל11 בתים - 10 בתים בשביל האותיות, ועוד בית אחד לסיום המחרוזת (/0).
  • כמו שיטת ASCII יש עוד המון שיטות לקידוד, כמו למשל שיטת UTF-16 מאפשרת לקודד עוד המון סימנים, כמו אותיות בעברית, ביוונית ויפנית ו2 בתים לכל אות.
    בפייתון הפונקציה chr מקבלת מספר ומחזירה את האות שלו בascii:
    Pasted image 20240706170003.png
    בפייתון הפונקציה ord מקבלת אות, ומחזירה את היצוג שלה בascii:
    Pasted image 20240706170035.png

התעסקות עם בתים בפייתון

  • בפייתון כדי ליצור בתים, אנחנו צריכים ליצור מחרוזת שההתחלה שלה עם האות b.
    b"many bytes"
    
  • עכשיו אם במחרזות בתים שלנו אנחנו נכתוב סימנים, הם יתורגמו לבתים עם ascii
  • לעומת זאת בגלל שאפשר לייצג בתים גם עם hex אנחנו יכולים גם לכתוב:
    b"hello \x77\x6f\x72\x6c\x64"
    
  • כאשר אחרי כל x\ אנחנו כותבים 2 ספרות הקס שמייצגות בית.
  • אם נרצה להפוך את האובייקט בתים שיצרנו למחרוזת אנחנו יכולים להשתמש בפונקציה .decode:
    Pasted image 20240706171729.png
  • וזה יחזיר לנו מחרוזת של "hello world"
  • בנוסף אנחנו יכולים להפוך מחרוזת לבתים עם ASCII באמצעות הפונקציה encode:
    Pasted image 20240706171713.png