מבוא כללי לתכנות ולמדעי המחשב 1843-0310 מרצה: אמיר רובינשטיין מתרגל: דין שמואל אוניברסיטת תל אביב סמסטר חורף 2017-8 חלק א - השיטה הבינארית שיעור 5 ו- 1? ספירה בבסיס 2 ואיך אומרים "hello" עם 0 1
ממעגלים חשמליים לביטים הטכנולוגיה של זיכרון המחשב ופעילות המעבד מבוססת על מכשירים אלקטרוניים הקרויים טרנזיסטורים (הומצאו ב- 1947, Labs.(Bell ) -9 10 מטר). אלו מעגלים חשמליים זעירים שגודלם כ- 1 ננומטר בכל רגע נתון, המתח החשמלי בטרנסיסטור יכול להיות באחד משני מצבים: 0v. א ו 5v+ לכן טרנזיסטורים יכולים לשמש כמתגים הבוררים בין שני מצבים אפשריים. הרכבה של הרבה מתגים יחד מאפשרת לשמור מידע רב ולבצע פעולות מורכבות. הפשטה (אבסטרקציה) שימושית מאוד היא להתעלם מהפרטים החשמליים, ולכנות את שני המצבים בשמות כמו True/False או 1/0. (ספרה בינארית, :(bit = binary digit ספרה שמוגבלת לשני ערכים בלבד: 0/1 בניגוד למשל לספרה עשרונית digit).(decimal או ספרה הקסאדצימלית (בסיס 16) שיכולה לקבל 16 ערכים: 0,1,2,3, 8,9,a,b,c,d,e,f ביט 2
מה כבר אפשר לעשות עם ביטים? תשובה: כל מה שאפשר לעשות עם מספרים טבעיים (,0,1,2,3). זאת מכיוון שניתן לייצג כל מספר טבעי בכתיב בינארי, (מייד נראה זאת). ו ל ה י פ ך (figure taken from http://www.learner.org) 3
ייצוג מספרים טבעיים בבינארית שיטה עשרונית: שיטה בינארית: 4
ייצוג מספרים טבעיים בבינארית (המשך) תרגום ממספר בינארי למספר עשרוני: 1 1 0 1 * 2 3 2 2 2 1 2 0 13 = 8 + 4 + 0 + 1 לבסיס 10: >>> int("1101", 2) '13' ובפייתון: הפונקציה int משמשת לתרגום מבסיס 2 (או אחר) הבסיס >>> bin(13) '0b1101' ובכיוון ההפוך, מבסיס 10 ל- 2 (התחילית 0b מציינת שמדובר בבסיס 2): 5
שאלות נניח שמשתמשים ב- 3 ביטים על מנת לייצג את המספרים,0,1,2,3 (מספרים שלמים אי שליליים). מהו המספר הגדול ביותר אותו ניתן לייצג כך? ואם משתמשים ב- 4 ביטים? 5 ביטים? n ביטים? (כלומר פי כמה מגדילה תוספת של ביט אחד לטווח הייצוג?) 6
פעולות חשבון בבסיס 2 1 1 1 1 (carried digits) 1 1 1 1 + 1 1 0 1 0 ------------- = 1 0 1 0 0 1 15 + 26 -------- = 41 חיבור 1 0 1 1 0 1 0 --------- 0 0 0 + 1 0 1 + 0 0 0 + 1 0 1 --------------- = 1 1 0 0 1 0 5 10 -------- 50 כפל 7 חיסור, חילוק, באופן דומה...
פעולות יסודיות באמצעות מעגלים חשמליים נרד לרגע ברמת ההפשטה של הדיון. נביט למשל על AND, OR, XOR ניתן לממש אותם ברמת החומרה כמעגל חשמלי גם חיבור, כפל ופעולות בסיסיות נוספות ניתן לממש כך לדוגמה, ניתן לבצע חיבור של שני ביטים באמצעות AND, XOR כאן הביטים בקלט הם A ו- B התוצאה היא המספר הבינארי CS (ראו איור). כלומר = 00 0+0 1+0 = 0+1 = 01 Imagers from: http://www.informatics.buzdo.com/p080-logic-circuits.htm#n1 1+1 = 10 8
ייצוג מידע באמצעות ביטים אז אמרנו שביטים שווים בכוחם למספרים טבעיים. מכאן ניתן להמשיך ולייצג גם מספרים שלמים שליליים, ובהמשך גם סוגי מידע אחרים: 3.14-0.3333 צליל תמונה (בהמשך הקורס) טקסט (בהמשך) מספרים ממשיים מספרים שלמים (חיוביים ושליליים),-1, 0,+1,... ביטים מעגל חשמלי 9
ייצוג של תווים לכל תו מותאם מספר שלם כלשהו. ההתאמה כזו נקראת קידוד.(coding) בעבר הייתה נהוגה שיטת הקידוד,ASCII שהבחינה בין 128 תווים שונים. ASCII = American Standard Code for Information Interchange כיום נהוגה שיטת הקידוד Unicode (הרחבה של שיטת,(ASCII המבחינה בין כ- 100,000 תווים שונים (יש לה גרסאות שונות, למשל.(UTF-8 10
הערכים הראשונים http://en.wikipedia.org/wiki/unicode טבלת Unicode 128 בפייתון: >>> ord("a") 97 >>> chr(97) 'a' >>> chr(ord("a") + 3)??? הערה: בטבלה מופיעים גם הערכים המספריים של התווים בבסיס 16.( hexadecimal) 11
בסיס 16 (הקסדצימלי) בבסיס 16 יש 16 ספרות. נהוג להשתמש באותיות עד f לייצוג 6 הספרות העליונות: a 0, 1, 2,, 8, 9, a, b, c, d, e, f המרה בפייתון (התחילת 0x מציינת את הבסיס ההקסדצימלי): >>> hex(10) '0xa' >>> hex(15) '0xf' >>> hex(62) '0x3e' #62 = 3*16 + 14 12 >>> int("3e", 16) 62
תרגילים 8 רצף הביטים הבא מייצג טקסט כלשהו. מהו הטקסט? כל תו מיוצג ע"י ביטים..1 בכיתה נפתור שאלה זו "ידנית", כל שמיניה בנפרד, ואילו בתרגול תכתבו לולאה שעושה את העבודה באופן אוטומטי. ' 0110100001100101011011000110110001101111' כמה זיכרון תופס קובץ טקסט פשוט (פורמט,.txt לא הפורמטים המתקדמים יותר כגון (docx 100,000 תווים, בהנחה שכל תו תופס 8 ביטים? עם.2 13
ביטים, בייטים וכו'... 1 bit = 0/1 1 byte = 8 bit 1 Kilobyte (KB) = 2 10 bytes = 1024 bytes 1 Megabyte (MB) = 2 20 bytes = 1024 Kilobytes 1 Gigabyte (GB) = 2 30 bytes = 1024 Megabytes 1 Terabyte (TB) = 2 40 bytes = 1024 Gigabytes 14