ייצוג מספרים יהודה אפק, יוסי מטיאס אוניברסיטת תל אביב ייצוג מספרים יהודה אפק, יוסי מטיאס אוניברסיטת תל אביב מבוסס על הרצאות של יורם זינגר, האוניברסיטה העברית י"ם
ייצוג מספרים במחשב הייצוג הפנימי במחשב וכן הפעולות האריתמטיות והלוגיות הינן כולן בינאריות. המרות מבסיס בינארי לבסיס אחר (בדר"כ עשרוני) הינן לצורך הצגת תוצאות. בסיסים נוספים לצורך הצגה שהינם שימושיים: Octal (8), Hexadecimal (16) 0…7 0…9ABCDEF 10 11 12 13 14 15 המעבר מבינארי לאוקטל או הקסדצימל הינו פשוט ומתבצע ע"י קיבוץ: 100 010 111.001 000 110 111 ( 4 2 7 . 1 0 6 7 )8 0011 1001 1100.0001 1000 1010 ( 3 9 C . 1 8 A )16 קוד מכונה "ישן" ו - Boot programs נכתבו ישירות ב"הקסא".
מעבר בין בסיסים מספר: בסיס r ערך: בסיס radix מעבר לבסיס עשרוני (decimal): * *
LSB bit ( Least significant bits) MSB bit (most significant bits) LSB bit ( Least significant bits)
שיטה אחרת להעברת בסיסים לבסיס עשרוני (decimal): קל לראות שהוספת 0 למספר מצד ימין – גורמת להכפלה ב- 2 של המספר – Shift left 1 דוגמא: שאלה: מה מבצע Shift right 1 לכן ניתן לחשב בראש מספר בצורה הבאה: במקום
מעבר מעשרוני לבסיס אחר: נבצע חילוקים "מתמשכים" ב r: X X / r X(1) , S(1) שארית X mod r X(1)/r X(2) , S(2) שארית מספר להמרה X(2)/r X(3) , S(3) שארית מנה )S(n)S(n-1)…S(2)S(1))r התוצאה: דוגמא: (35)10 (?)2 35/2 (17,1) a0 17/2 (8,1) a1 8/2 (4,0) a2 (100011)2 4/2 (2,0) a3 252423222120 2/2 (1,0) a4 1/2 (0,1) a5 סיים!
חיבור מספרים: + (בסיס r) O0=(a0+b0) mod r C1 C0 O0=(a0+b0) mod r C0 =1 iff a0 + b0 r (0 otherwise) ai{0,1,…,r-1} bi{0,1,…,r-1} Oi=(ai+bi+ci-1) mod r Ci=[(ai+bi+ci-1)r] תזכורת: ?
חיבור מספרים בינאריים: + C1 C0 “On” Cn-1 נשא סופי ai{0,1} bi {0,1} oi{0,1} ci {0,1} Oi = (ai + bi + ci-1( mod 2 ci-1, bi, aiזוגיות של ai + bi + ci-1 2 אם 0 אחרת Ci = פעולת החיבור והנשא ניתנות למימוש "פשוט" ע"י מעגלים ספרתיים.
ייצוגם של מספרים שליליים – ייצוג ע"י גודל וסימן S גודל n ביטים סימן S=0 המספר חיובי X (n ביטי הגודל) S=1 המספר שלילי -X דוגמא: n=2 0-: 100 1-: 101 2-: 110 3-: 111 שליליים: 0: 000 1: 001 2: 010 3: 011 חיוביים: ייצוג כפול ל – 0. קשה לבצע פעולות אריתמטיות. משתמשים בייצוג זה בייצוג מספרים בנקודה צפה (floating point) לצורך הצגת המונה (exponent).
חישוב המשלים ל – 1: נרצה שחיבור השלילי של מספר יתן 0. נרצה לייצג מספרים שליליים באופן פשוט שיאפשר חיסור ע"י חיבור השלילי של מספר. חישוב המשלים ל-1: הפוך "1" ל – "0" ו – "0" ל –"1". 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 1 נרצה שחיבור השלילי של מספר יתן 0.
חישוב המשלים ל – 2: הפתרון נוסיף 1. חישוב המשלים ל-2: חישוב המשלים ל-2: הפוך "1" ל – "0" ו – "0" ל –"1". נוסיף לתוצאה 1 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 1 + 1 1 0 0 1 0 1 0 0
Unsigned : במשלים ל-2 : n ביטים, מיצג 2n מספרים. טווח המספרים an-1 an-2 a1 a0 טווח המספרים 0, 1, …, 2n -1 במשלים ל-2 : מספרים בני nספרות, ביט הסימן הספרה ה- MSB. טווח המספרים -2n-1, -2n-1+1, …, -1, 0, 1, …, 2n-1 -1 an-1 an-2 a1 a0
מציאת הערך של מספר שלילי כדי לדעת מה מיצג מספר שלילי – מבצעים שוב אותו תהליך היפוך כל 0 ל-1 וכל 1 ל-0 ובסוף הוספת 1 כלומר 01111110 0111110110000010 כלומר המספר הוא 126-
Sign extend נתון מספר ב- 8 ביטים (byte) רוצים להציג את המספר ב- 16 ביטים הפתרון קח את MSB ו"מרח" אותו על כל הביטים החדשים =111111111000001010000010 01111110=0000000001111110
חיסור בעזרת משלים ל –2: קלט: X,Y מספרים בינאריים בעלי n ספרות וספרת סימן (n+1) מיוצגים ע"י 2’s Complement Xn-1Xn-2…X0 Yn-1Yn-2…Y0 קלט: X,Y נשא Xn-1Xn-2…X1 X0 Yn-1Yn-2…Y1Y0 Zn-1Zn-2…Z0 חבר: X+Y Z=X+Y נשא סופי התעלם מנשא סופי בדוק גלישה overflow התוצאה הינה חיובית / שלילית בייצוג 2’s Comp. .
3 = 00112 (-5) = 24 – 5 = 0 1 0 1 2 1 0 1 1 2 שלילי 2’s Comp. -2 דוגמא: n=3, חשב 3 + (-5) 3 - 5 נזדקק ל - 4 סיביות (+1) ביט סימן. 3 = 00112 (-5) = 24 – 5 = 0 1 0 1 2 1 0 1 1 2 1 1 שלילי 2’s Comp. -2 דוגמא: n=3, חשב 5 + (-3) 5 - 3 נזדקק ל - 4 סיביות (+1) ביט סימן. 5 = 01012 (-3) = 24 – 3 = 0 01 1 2 1 1 0 1 2 1 1 נשא סופי "התעלם". “1” מתעלמים מהנשא הסופי. הוא חשוב בבדיקה של גלישה (overflow) שתיתכן כאשר מחברים שני חיוביים (שליליים) והתוצאה גדולה (קטנה) מדי לייצוג ב– n ביטים.
נשא וגלישה של ביטים (או ספרות): נשא Carry: הינו מצביע על "תופעה" תקינה ומשמש לקביעת הסימן. גלישה Overflow: מצביע על פעולה לא תקינה כתוצאה מחיבור שני מספרים גדולים יותר מדי. דוגמא: עובדים עם מספרים בני 3 ביטים (ייצוג בינארי) ורוצים לייצג שליליים וחיוביים כדי לבצע חיסור: נקצה 4 ביטים למספר. Carry: 7 - 3 7: 1 3: 1 -3: 1 Virtual מדומה + נשא סופי 1 4 Overflow: 5 + 7 1 + 1 אין נשא סופי “-4” 1 1
Overflow ב-משלים ל-2 חיבור שני חיובים: + = an-1 an-2 a1 a0 n- 1 n-2 חיבור שני חיובים: 1 + 1 = אין נשא 1 אין נשא סופי (n-1) יש נשא (n-2) חיבור שני שליליים: 1 + 1 יש נשא סופי = 1 1 יש נשא סופי (n-1) אין נשא (n-2). an-1 an-2 … a1 a0 bn-1 bn-2 … b1 b0 On-1 On-2 Cn-1 Cn-2 Ci נשא מביטים "i" Overflow: Cn-1 Cn-2 = 1 Cn-1 = "not of" Cn-2
Overflow ב - unsigned חיבור שני חיובים: + = נשא 1 נשא סופי overflow an-1 an-2 a1 a0 n- 1 n-2 חיבור שני חיובים: 1 + 1 = נשא 1 נשא סופי overflow
בדיקת גלישה – מימוש: מספר בין n=4 ביטים a3 b3 a2 b2 a1 b1 a0 b0 C3 Adder C2 Adder C1 Adder C0 Adder "0" נשא סופי נשא לתוך סיביות הסימן S3 S2 S1 S0 מספר בין n=4 ביטים Overflow: Cn-1 Cn-2 = 1 בדוגמא (5+7): 1 = C3 C2 אם ו - חיוביים לא צריך להיות נשא לתוך המסכם האחרון ולא יכול להיות נשא סופי. אם ו - שליליים חייב להיות נשא סופי וכדי שהמספר יהיה שלילי צריך נשא לתוך המסכם האחרון.
מסכם של שני ביטים: + b1 a1 Carry a1 + b12 (a1 + b1) mod 2 C S S = 1 אמ"מ בדיוק אחד מ – b1/a1 הינו 1. C = 1 אמ"מ גם a1 וגם b1 הינם 1. C = a1 and b1 = a1 b1 = a1b1 S = a1 Xor b1 = a1 b1 = a1 b1 + a1b1 and, , function {0,1} {0,1) {0,1} and (x,y) = 1 iff x=y=1 מהם הכללים או החוקים בעזרתם עובדים עם ביטים? George Boole (1854) Boolean Algebra
קודים מתקני שגיאות טעויות אחסון כתוצאה ממתחים אקראיים. שינוי של ביט יחיד יכול לגרום לתוכנית שלמה לא לעבוד. קודים מתקני שגיאות (או מגלי שגיאות) ECC – Error Correcting Codes Linear Codes, Hamming, Reed – Salomon Error Detecting Codes – Checksum, Parity Checking Example: הוסף ביט לכל 4 ביטים, הביט יספור זוגיות S = (X1 + X2 + X3 + X4) mod 2 = X1 X2 X3 X4 X1 X2 X3 X4 S 1 0 0 1 0 1 1 1 0 1 אם נופלת שגיאה: (X1 + X2 + X3 + X4 + S) mod 2 0
אוגרים ואחסון ביטים (בינארי) (signed) char 8 bit short 16 bit int 32 bit long int 64 bit אוגרים (Registers) הינם אוסף של תאי זיכרון מהירים מאוד (זמן גישה כתדר שעון המחשב) שבעזרתם מבצעים פעולות אריתמטיות. מחשב מכיל ALU המבצע חיבורים מהירים תוך כדי בדיקת נכונות התוצאה (overflow) R1 R2 + R3 R4 …
קודים וייצוגים ייצוג של ערכים לא בינאריים מבוצע ע"י שמירת וקטורים של ביטים. דוגמא: BCD – Binary Coded Decimal 0 0001 … 7 0111 1 0001 … 8 1000 2 0010 … 9 1001 קודים אלפאנומרים: ASCII, EBCDIC (IBM) A 1000001 0 0110000 B 1000010 1 0110001 C 1000011 9 0111001 Z 1011010 $ 0100100 . 0101110 ( 0101000 = 0111101 … …
char: גודל byte ב - ASCII American Standard Code For information Interchange ב- Unicode - גודל char הוא 2 בתים.