חזור לתיקייה: תרגול

1 - יצוג מספרים וקידוד ספרות

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • הבסיס העשרוני
  • מעבר מבסיס b לבסיס 10
  • מעבר מבסיס 10 לבסיס b כלשהו
  • מעבר בין בסיסים
  • אריטמטיקה בבסיסים שונים
  • חיבור וחיסור בבסיס 2
  • חיבור בבסיס 16
  • שיטת המשלים ל-2
  • נקודה צפה - floating; point
  • קודים בינאריים וציקלים
  • קודים בינאריים לקידוד ספרות בבסיס 10
  • קודים משוקללים
  • קודים ציקלים
  • המרה מקוד בינארי לקוד Gray
  • תרגול

1 - יצוג מספרים וקידוד ספרות

00440252

מערכות ספרתיות ומבנה המחשב

רשימות תרגול לקריאה בשבת

יצוג מספרים וקידוד ספרות

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

היום נדבר על הנושאים:

  • יצוג מספרים טבעיים
  • מעבר בין בסיסים
  • אריתמטיקה
  • ייצוג מספרים שליליים בשיטת המשלים ל-2
  • נקודה צפה - floatfloatfloat
  • קודים בינארים לקידוד ספרות בבסיס 10
  • קודים ציקלים

הבסיס העשרוני

(237)10=2⋅102+3⋅10+7(237)_{10}=2\cdot 10^2+3\cdot 10+7(237)10​=2⋅102+3⋅10+7

נסמן בסיס כמספר מימין לסוגריים.
מיקום הספרה iii קובע את החזקה שהיא תקבל. הבסיס bbb הוא מה שמעלים בחזקה, כאשר www הוא המשקל של הספרה.

משפט

לכל מספר NNN בכל בסיס bbb מתקיים:

N=∑idi⋅wiN=\sum_{i} d_{i}\cdot w_{i}N=i∑​di​⋅wi​

כאשר wiw_{i}wi​ הוא המשקל של הספרה ה-iii-ית: wi=biw_{i}=b^iwi​=bi ו-did_{i}di​ הוא הספרה ה-iii-ית: 0≤di≤b0\leq d_{i}\leq b0≤di​≤b.

מעבר מבסיס bbb לבסיס 101010

  • בסיס בינאיר b=2b=2b=2:
    (1010)2=1⋅23+0⋅22+1⋅21+0⋅20=(10)10(1010)_{2}=1\cdot 2^3+0\cdot 2^2+1\cdot2^1+0\cdot 2^0=(10)_{10}(1010)2​=1⋅23+0⋅22+1⋅21+0⋅20=(10)10​
    (10010011)2=1⋅27+1⋅24+1⋅21+1⋅20=(147)10(10010011)_{2}=1\cdot 2^7+1\cdot 2^4+1\cdot 2^1+1\cdot 2^0=(147)_{10}(10010011)2​=1⋅27+1⋅24+1⋅21+1⋅20=(147)10​
  • אם זה שבר בבסיס בינארי:
    (1010.101)2=1⋅23+1⋅21+1⋅2−1+1⋅2−3=(10.625)10(1010.101)_{2}=1\cdot 2^3+1\cdot 2^1+1\cdot 2^{-1}+1\cdot 2^{-3}=(10.625)_{10}(1010.101)2​=1⋅23+1⋅21+1⋅2−1+1⋅2−3=(10.625)10​
  • בסיס הקסדצימלי b=16b=16b=16:
    (A31)16=10⋅162+3⋅161+1⋅160=(2609)10(A31)_{16}=10\cdot 16^2+3 \cdot 16^1+1\cdot 16^0=(2609)_{10}(A31)16​=10⋅162+3⋅161+1⋅160=(2609)10​
    (7EC4)16=7⋅163+14⋅162+12⋅161+4⋅160=(32452)10(7EC4)_{16}=7\cdot 16^3+14\cdot 16^2+12\cdot 16^1+4\cdot 16^0=(32452)_{10}(7EC4)16​=7⋅163+14⋅162+12⋅161+4⋅160=(32452)10​

מעבר מבסיס 101010 לבסיס bbb כלשהו

בכל שלב מחלקים בבסיס bbb. השארית מהווה ספרה במספר החדש בעוד שהמנה מועברת לשלב הבא.

(dn−1dn−2…d1d0)b=dn−1⋅bn−1+dn−2bn−2+⋯+d1b1+d0b0(d_{n-1}d_{n-2}\dots d_{1}d_{0})_{b}=d_{n-1}\cdot b^{n-1}+d_{n-2}b^{n-2}+\dots+d_{1}b^{1}+d_{0}b^0(dn−1​dn−2​…d1​d0​)b​=dn−1​⋅bn−1+dn−2​bn−2+⋯+d1​b1+d0​b0 =b(dn−1bn−2+dn−2bn−3+⋯+d1)+d0=b(d_{n-1}b^{n-2}+d_{n-2}b^{n-3}+\dots+d_{1})+d_{0}=b(dn−1​bn−2+dn−2​bn−3+⋯+d1​)+d0​
דוגמה

נמצא את הייצוג של 500500500 בבסיס 161616:

50016=31⋅16+416\frac{500}{16}= \frac{31\cdot 16 + 4}{16}16500​=1631⋅16+4​

השארית שלנו היא 4 ולכן d0=4d_{0}=4d0​=4.

3116=1⋅16+1516\frac{31}{16}=\frac{1\cdot 16 +15}{16}1631​=161⋅16+15​

לכן, d1=15d_{1}=15d1​=15.

116=0⋅16+116\frac{1}{16}=\frac{0\cdot 16+1}{16}161​=160⋅16+1​

ולכן, d2=1d_{2}=1d2​=1.
קיבלנו את המספר:

(500)10=(1F4)16(500)_{10}=(1F4)_{16}(500)10​=(1F4)16​

מעבר בין בסיסים

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

דוגמה (מעבר מבסיס 222 לבסיס 161616 ובחזרה)

נשים לב כי 16=2416=2^416=24.

(1101011110001111)2=(1101,0111,1000,1111)2=(D78F)16(1101011110001111)_{2}=(1101,0111,1000,1111)_{2}=(D78F)_{16}(1101011110001111)2​=(1101,0111,1000,1111)2​=(D78F)16​

הסיבה לכך שאנו יכולים לעשות את זה היא כי בעצם כל בלוק שכזה הוא ספרה אחת בבסיס האחר.

אריטמטיקה בבסיסים שונים

חיבור וחיסור בבסיס 2

+101011101110000\begin{matrix} + \\ \\ \end{matrix}\begin{matrix} 1 & 0 & 1 & 0 & 1 \\ 1 & 1 & 0 & 1 & 1 \\ \hline 1&0&0&0&0 \end{matrix}+​111​010​100​010​110​​ −1101011110111000\begin{matrix} - \\ \\ \end{matrix}\begin{matrix} 1 & 1 & 0 & 1 & 0 & 1 \\ & 1 & 1 & 1 & 0 & 1 \\ \hline & 1 & 1 & 0 & 0 & 0 \end{matrix}−​1​111​011​110​000​110​​

חיבור בבסיס 16

+151B30\begin{matrix} + \\ \\ \end{matrix}\begin{matrix} 15 \\ 1B \\ \hline 30 \end{matrix}+​151B30​​ −351D18\begin{matrix} - \\ \\ \end{matrix}\begin{matrix} 3 & 5 \\ 1 & D \\ \hline 1 & 8 \end{matrix}−​311​5D8​​

שיטת המשלים ל-2

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

הביט הכי קטן נקרא least significant bit(LSGLSGLSG) והביט הכי גדול נקרא most significant bit(MSBMSBMSB).
הביט הכי גדול יהיה הסימן שלנו כאשר 000 אומר שהמספר חיובי בעוד ש-111 אומר שהמספר שלילי.

דוגמה

המספר 100100100 באופן רגיל הוא 444. אך בשיטת המשלים ל-222.
111 מסמל שהמספר שלילי כי הוא בביט הכי גדול(most significant) ואז אנחנו נוסיף אחד להיפוך של הביטים:

+111100  ⟹  −4\begin{matrix} + \\ \\ \end{matrix}\begin{matrix} & 1 & 1 \\ & & 1 \\ \hline 1 & 0 & 0 \end{matrix}\begin{matrix} \\ \\ \implies -4 \end{matrix}+​1​10​110​​⟹−4​

ולכן המספר 100100100 בשיטת המשלים ל-222 הוא −4-4−4.

טווח הייצוג של השיטה הינה: −2N−1≤A≤2N−1−1-2^{N-1}\leq A\leq 2^{N-1}-1−2N−1≤A≤2N−1−1.

יתרונות השיטה הינם:

  • חיבור/חיסור פשוטים: אם יש carrycarrycarry פשוט מתעלמים ממנו.
  • יצוג בודד לאפס.
דוגמה

+00111(=7)10111      (=−9)11110      (=−2)\begin{matrix} + \\ \\ \end{matrix} \begin{matrix} 0 & 0 & 1 & 1 & 1 & (=7) \\ 1 & 0 & 1 & 1 & 1 & \;\;\;(=-9) \\ \hline 1 & 1 & 1 & 1 & 0 & \;\;\;(=-2) \end{matrix}+​011​001​111​111​110​(=7)(=−9)(=−2)​​
דוגמה

+11011      (=−5)11010      (=−6)110101      (=−11)\begin{matrix} + \\ \\ \end{matrix} \begin{matrix} & 1 & 1 & 0 & 1 & 1 & \;\;\;(=-5) \\ & 1 & 1 & 0 & 1 & 0 & \;\;\;(=-6) \\ \hline \boxed{1} & 1 & 0 & 1 & 0 & 1 & \;\;\;(=-11) \end{matrix}+​1​​111​110​001​110​101​(=−5)(=−6)(=−11)​​

זורקים את ה-111 בקופסא הזה, הוא ה-carrycarrycarry.

חיבור שני מספרים שליליים עלול להביא לתוצאה חיובית, כלומר לגלישה(הסימן ימצא רק ב-carrycarrycarry אותו אנו זורקים)
איך נתקן את הבעיה? באמצעות Sign  extentionSign\; extentionSignextention: הוספת סיביות למספר ע"י שכפול הסיבית ה-MSBMSBMSB עד למילוי כל הסיביות שנוספו.

דוגמה

הרחבה לייצוג של −4-4−4 מ-333 סיביות ל-444 סביות יהיה 1100←1001100 \leftarrow 1001100←100.
הרחבה לייצוג של −4-4−4 מ-333 סיביות ל-888 סיביות יהיה 11111100←10011111100 \leftarrow 10011111100←100.

הערך המקסימלי שמייצג מספר בינארי בין 323232 סיביות לא מכוון הוא 232−12^{32}-1232−1 (כארבעה מיליארד)
ומכוון? בין −232−1-2^{32-1}−232−1 עד 232−1−12^{32-1}-1232−1−1.

נקודה צפה - floating  pointfloating\; pointfloatingpoint

השיטה מאפשרת ייצוג של מספר גדול מאוד או קטן מאוד במעט סיביות (בדוגמה: 323232)
נתון מערכת: (Bias)  B=127(Bias)\; B=127(Bias)B=127. (בכל מערכת שונה)
​1 - יצוג מספרים וקידוד ספרות 2026-04-13 09.20.25.excalidraw.svg
אם האקספוננט(מסומן ב-EEE) מקיים 1≤E≤2541\leq E\leq2541≤E≤254 אז המספר יהיה Normalized ונוסחתו תהא:

Value=(−1)S⋅2E−B⋅(1+F)\text{Value}=(-1)^S \cdot 2^{E-B}\cdot (1+F)Value=(−1)S⋅2E−B⋅(1+F)

אך אם E=0E=0E=0 מתקיים:

Value=(−1)S⋅2E−B+1⋅F\text{Value}=(-1)^S\cdot 2^{E-B+1}\cdot FValue=(−1)S⋅2E−B+1⋅F
דוגמה

נניח המספר:

01000,0000100,0000,0000,0000,0000,0000\begin{matrix} 0 & 1000, 0000 & 100,0000,0000,0000,0000,0000 \end{matrix}0​1000,0000​100,0000,0000,0000,0000,0000​

מכיוון ש-S=0S=0S=0 המספר חיובי.

E=27=128,F=2−1+2−2=0.75E=2^7=128, \quad F=2^{-1}+2^{-2}=0.75E=27=128,F=2−1+2−2=0.75 Value=(−1)0⋅2128−127⋅1.75=3.5\text{Value}=(-1)^0 \cdot 2^{128-127}\cdot 1.75=3.5Value=(−1)0⋅2128−127⋅1.75=3.5
הערה

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

0x406000000x40600000 0x40600000

אגב, הסימון 0x0x0x פשוט אומר שזה בסיס 16 - והוא אינו משפיע על הערך.

חשוב: אם E=255E=255E=255 אזי אחד מההבאים מתקיים:

  • אם F=0F=0F=0 אז מייצג ∞\infty∞.
  • אחרת, מייצג מספר לא קיים NaNNaNNaN.

הדיוק של floatfloatfloat:
​תרגול ספרתיות 1 תמונה 1.png
הטבלה מראה כי ככל שהאקספוננט גדל אנו יכולים לייצג הרבה יותר מספרים.

קודים בינאריים וציקלים

קודים בינאריים לקידוד ספרות בבסיס 101010

הגדרה 1

ייצוג בינארי המקיים כי לכל ספרה 0…90\dots90…9 קיימת מילת קוד שונה נקרא קוד בינארי לקידוד ספרות בבסיס 10.

דוגמה

0=10005=01111=10016=00012=01107=10113=11118=00114=00009=1101\begin{matrix} 0=1000 & 5=0111 \\ 1=1001 & 6=0001\\ 2=0110 & 7=1011 \\ 3=1111 & 8=0011 \\ 4=0000 & 9=1101 \end{matrix}0=10001=10012=01103=11114=0000​5=01116=00017=10118=00119=1101​

קודים משוקללים

בקוד זה יש חוקיות:

  • כל ספרה מיוצגת ע"י 444 סיביות(x1,x2,x3,x4x_{1},x_{2},x_{3},x_{4}x1​,x2​,x3​,x4​)
  • לכל סיבית יש משקל מוגדר (wi)(w_{i})(wi​)
  • ערך הספרה הוא:
    N=∑i=14wixi=w1x1+w2x2+w3x3+w4x4N=\sum_{i=1}^4 w_{i}x_i=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+w_{4}x_{4}N=∑i=14​wi​xi​=w1​x1​+w2​x2​+w3​x3​+w4​x4​
דוגמה (קוד BCD)

​טבלת קוד מסויים ספרתיות תרגול 1.png
נבדיל ביו ייצוג המספר 16 בבסיס בינארי: 100001000010000 לבין יצוג המספר 16 בקוד BCDBCDBCD:

0001,01100001,01100001,0110

כאשר 000100010001 מייצג 1 ו-011001100110 מייצג 6.

קודים ציקלים

מילת קוד של ספרה כלשהי שונה ממילת הקוד של הספרה שלפניה ואחריה בסיבית אחת בלבד.

דוגמה (קוד GrayGrayGray)

קוד באורך 2:

000101211310\begin{array}{|c|c|} \hline 0 & 00 \\ 1 & 01 \\ 2 & 11 \\ 3 & 10 \\ \hline \end{array}0123​00011110​​

קוד באורך 3:

00001001201130104110511161017100\begin{array}{|c|c|} \hline 0 & 000 \\ 1 & 001 \\ 2 & 011 \\ 3 & 010 \\ 4 & 110 \\ 5 & 111 \\ 6 & 101 \\ 7 & 100 \\ \hline \end{array}01234567​000001011010110111101100​​

בואו נרחיב את קוד Gray: משקפים את השורות הקיימות כמראה אופקית ומוסיפים עמודה:
​הרחבת קוד גרי.png

המרה מקוד בינארי לקוד GrayGrayGray

{gn=bngi=bi⊕bi+1=(bi+bi+1)(mod  2)i=(n−1),(n−2),…,1,0\begin{cases} g_{n}=b_{n} \\ g_{i}=b_{i}\oplus b_{i+1}=(b_{i}+b_{i+1})(mod\; 2)_{ \quad i=(n-1),(n-2),\dots,1,0} \end{cases}{gn​=bn​gi​=bi​⊕bi+1​=(bi​+bi+1​)(mod2)i=(n−1),(n−2),…,1,0​​

הקדמה ל-⊕\oplus⊕ שבקורס הזה ישמש אותנו כ-XORXORXOR

XYX⊕Y000011101110\begin{array}{c|c} X & Y & X \oplus Y \\ \hline 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \end{array}X0011​Y0101​X⊕Y0110​​

ההמרה בעצם מתבצעת כך:
​סיפרתיות תרגול 1 מעבר מבינרי לגרי.png

ההמרה מ-GrayGrayGray לבינארי תעשה אותו הדבר רק הפוך:

{bn=gnbi=bi+1⊕gi=(bi+1+gi)(mod  2)i=(n−1),…,1,0\begin{cases} b_{n}=g_{n} \\ b_{i}=b_{i+1}\oplus g_{i}=(b_{i+1}+g_{i})(mod\; 2)_{\quad i=(n-1),\dots,1,0} \end{cases}{bn​=gn​bi​=bi+1​⊕gi​=(bi+1​+gi​)(mod2)i=(n−1),…,1,0​​

כשאר ההמרה בעצם מתבצעת כך:
​ספרתיות תרגול 1 מעבר מגרי לבינארי.png

תרגול

תרגיל (אביב 23 מועד א')

נתונים שלושת המספרים הבאים המיוצגים בבסיסים שונים:

(xyz)b=(10)b2=(18)b2−b+4(xyz)_{b}=(10)_{b^2}=(18)_{b^2-b+4}(xyz)b​=(10)b2​=(18)b2−b+4​

בנוסף נסמן את הספרות הגדולות מ-999 באופן הבא:

A=(10)10,B=(11)10,C=(12)10A=(10)_{10}, B=(11)_{10},C=(12)_{10}A=(10)10​,B=(11)10​,C=(12)10​

מבין התשובות הבאות, מהם הערכים האפשריים ל-x,y,zx,y,zx,y,z כך שהמשוואה תהיה תקינה?
א. z=0,y=B,z=Cz=0,y=B,z=Cz=0,y=B,z=C
ב. x=C,y=0,z=0x=C,y=0,z=0x=C,y=0,z=0
ג. x=1,y=0,z=0x=1,y=0,z=0x=1,y=0,z=0
ד. x=0,y=9,z=3x=0,y=9,z=3x=0,y=9,z=3
ה. תשובות א' ו-ג' נכונות.

לפי שיטת מעבר בין בסיסים שהם חזקה, נחלק את המספר לחלקים של 2: yzyzyz ו-0x0x0x ואז (yz)b=0(yz)_{b}=0(yz)b​=0 ו-(x)b=(1)b2(x)_{b}=(1)_{b^2}(x)b​=(1)b2​.
נראה לי שפה ישר אפשר להגיע ל-ג' בגלל ש-x=1x=1x=1 כי 111 נמצא בשני הבסיסים ככל הנראה :)

איך שהמתרגל עשה את זה:

(xyz)b=xb2+yb+z(10)b2=1b2+0=b2(18)b2−b+4=b2−b+12⇓b=12⇓x=1,y=0,z=0\begin{matrix} (xyz)_{b}=xb^2+yb+z \\ (10)_{b^2}=1b^2+0=b^2 \\ (18)_{b^2-b+4}=b^2-b+12 \\ \Downarrow \\ b=12 \\ \Downarrow \\ x=1, y=0, z=0 \end{matrix}(xyz)b​=xb2+yb+z(10)b2​=1b2+0=b2(18)b2−b+4​=b2−b+12⇓b=12⇓x=1,y=0,z=0​

ולכן התשובה היא ג'.

תרגיל (חורף 2023 מועד ב')

סטודנט מעוניין לבצע חיבור בין שני מספרים המיוצגים כ-Floating Point.
הייצוג בו הסטודנט משתמש בעל B=0B=0B=0 ו-8 סיביות באופן הבא:

  • ה-MSBMSBMSB היא סיבית הסימן
  • 3 הסיביות הבאות מייצגות את האקספוננט
  • 4 הסיביות ה-LSBLSBLSB הן המנטיסה.

המספרים הנתונים הם:

A=11001001B=11001100A=11001001 \qquad B=11001100A=11001001B=11001100

הסטודנט מעוניין לייצג את החלק השלם של תוצאת החיבור בשיטת משלים ל-2 ע"י שימוש במספר סיביות קטן ככל האפשר.
מה התוצאה שיקבל הסטודנט? 1≤E≤2541\leq E\leq2541≤E≤254.
א. 0110101
ב. 1111101
ג. 1001011
ד. 1000000
ה. 11111101

נהפוך את שני המספרים לבסיס עשרוני באמצעות ה-floating  pointfloating\; pointfloatingpoint.

A:S=1  ⟹  שליליE=4F=12+116  ⟹  −25B:S=1  ⟹  שליליE=4F=12+14  ⟹  −28+  ⟹  −53\begin{matrix} A: \begin{matrix} S=1 \implies \R{\text{שלילי}} \\ E=4 \\ F= \frac{1}{2}+\frac{1}{16} \end{matrix} \implies -25 \\ B: \begin{matrix} S=1 \implies \R{\text{שלילי}} \\ E=4 \\ F=\frac{1}{2}+\frac{1}{4} \end{matrix} \implies -28 \end{matrix} +\implies -53A:S=1⟹שליליE=4F=21​+161​​⟹−25B:S=1⟹שליליE=4F=21​+41​​⟹−28​+⟹−53

נפרק את 535353:

−53=−(32+16+4+1)=↓בשיטת המשלים ל-2(1001011)2-53=-(32+16+4+1)\underset{\begin{matrix} \downarrow \\ \R{\text{בשיטת המשלים ל-2}} \end{matrix}}{=}(1001011)_{2}−53=−(32+16+4+1)↓בשיטת המשלים ל-2​=​(1001011)2​

ולכן התשובה היא ג' עוד פעם.