אריתמטיקה בינרית ומספרים שלמים עם סימן
הוצג| English | משמעות |
|---|---|
| overflow/ˌəʊvəˈfləʊ/ | היפל |
| two's complement/tuːz ˈkɒmplɪmənt/ | משלים שניים |
| register/ˈredʒɪstə/ | רגיסטר |
| sign bit/saɪn bɪt/ | סימן ביט |
| most significant bit/məʊst sɪɡˈnɪfɪkənt bɪt/ | ביט בולט |
| one's complement/wʌnz ˈkɒmplɪmənt/ | משלים אחד |
| Binary Coded Decimal/ˈbaɪnəri ˈkəʊdɪd ˈdesɪml/ | ערכון עשרוני ממוספר |
הבנק שאיבד יום
- ב-1 בספטמבר 1983 מדד מסחר בוונקובר עמד על 524.811. הוא נפתח ב-1000 עשרים וחודשים לפני כן, והשוק עלה ברציפות לאורך כל התקופה.
- התוכנה חיברה מחדש את המדד לאחר כל עסקה, בעיקור במקום העגלה בכל פעם. כל עיקור אבד שבר של נקודה. שלושת אלפים עסקאות ביום עשו את שאר הדבר.
- כאשר החישוב בוצע באופן תקין, המדד היה 1098.892: האריתמטיקה, ולא השוק, הכפילה אותו למחצה.
- אריתמטיקה על מספר קבוע של ביטים אינה האריתמטיקה ששמתם בה לימודים בבית הספר. שיעור זה עוסק בסיכום בינארי, התאפה, חיסור באמצעות משלים של שניים, מספרים סימנים ומספר BCD.
סיכום בינארי
- מחברים עמודה לעמודה מימין לשמאל, ומעבירים לחוליה הבאה, בדיוק כמו במערכת העשרונית.
- הכללים: $0 + 0 = 0$; $0 + 1 = 1$; $1 + 1 = 10$, כותבים 0 ומעבירים 1; $1 + 1 + 1 = 11$, כותבים 1 ומעבירים 1.
0101$+$0011$=$1000, כלומר $5 + 3 = 8$.

אותו שיטה כמו במערכת העשרונית, אך רק שני ספרות להעברה ביניהן
בינרי ומספרים שלמים עם סימן
בייט = סכום ערכי המקומות
ראה כיצד דפוס בינרי של 8 ביט מתאים למספר (וכיצד הוא יגרום לאחיזה מעבר ל-255).
הוסף את המספרים הבינאריים 0101 + 0011. תן את התוצאה בעלת 4 ביטים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
$5 + 3 = 8$, שהוא 1000 במערכת הבינרית.
גלישה
- גלישה מתרחשת כאשר תוצאת חישוב דורשת יותר ביטים מאשר ה-רשמה יכולה לאחסן. העברת הסך החוצה מהעמודה בעלת ערך הגבוה ביותר אבדה, ולכן התוצאה המאוחסנת שגויה.
- זוהי תכונה של רוחב הרשמה, ולא של המספר 255: ברשמה ב-16 ביטים הסכום הזה הוא תקין.
- בחישוב ממוספר סימן, האות המבטיל היא סימן שהופך באופן שגוי: שני מספרים חיוביים נתנים שלילי, או שני מספרים שליליים נתנים חיובי.
אחיזה באדיشن בינרי מתייחסת ל:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
עליית גבול (overflow) מתרחשת כאשר הסכום גדול מדי כדי להיכנס בביטים הזמינים; העומק מחוץ לעמודה השמאלית ביותר מאבד.
דוגמה פותרת: לקרוא לגלישה בשם המתאים
- הוסיפו את המספרים השלמים ללא סימן ב-8 ביטים
10110101ו-01101100והגיבו לתוצאה. - הסכום הוא
1 0010 0001, הדורש 9 ביטים. התוצאה האמיתית היא 289. - תשובה מלאה: התרחשה גלישה, מכיוון ש-289 גדול מהערך המקסימלי שרשמה ב-8 ביטים יכולה לאחסן, 255; העברת הסך החוצה מהביט בעל הערך הגבוה ביותר אבדה, ולכן התוצאה המאוחסנת
0010 0001היא 33, שהוא שגוי. - הנקודה ניתנה לקריאת רוחב הרשמה ואמירה כי התוצאה אינה ניתנת לייצוג בה. "התוצאה הייתה יותר מ-255" לבד אינה מעניקה נקודות.
שני מספרים שלמים אי-שליליים בגודל 8 ביט נוספים והתוצאה דורשת 9 ביט. מהי ההסבר המלא לנקודות מלאות?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
צין את רוחב הרישום, אמר שהתוצאה לא יכולה להיות מיוצגת בו, ואמר מה קורה לעומק. האפשרויות האחרות מציינות סימן ללא הגורם.
חיסור על ידי משלים לשניים
- כדי לחשב $A - B$: יצרו את משלים השניים של $B$ על ידי הפכת כל ביט והוספת 1, הוסיפו אותו ל-$A$, ולאחר מכן השלכו כל עברת סך סופית.
- $100 - 30$ ב-8 ביטים: משלים השניים של
0001 1110הוא1110 0001הפוך, פלוס 1, כלומר1110 0010. 0110 0100$+$1110 0010$=$1 0100 0110; השליכו את ה-1 הקדמי וקראו0100 0110$= 70$. ✓

חיסור הופך להוספה, ולכן למעבדים אין צורך בחוסר
מהו משלים שניים בגודל 4 ביט של 0011? (הפוך, ואז הוסף 1)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הפוך 0011 → 1100, ואז הוסף 1 → 1101 (שהוא מייצג $-3$).
סדר את שלבי החיסור של B מ-A באמצעות משלים שניים.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
הפוך, הוסף אחד, הוסף, השלך. ההשלכה היא מה שמשמר את התשובה ברוחב הרישום.
שלמים ממוספרי סימן במשלים לשניים
- במספר משלים לשניים ב-$n$ ביטים, הביט בעל הערך הגבוה ביותר הוא ביט הסימן: 0 פירושו חיובי, 1 פירושו שלילי. באופן שקול, הביט העליון נושא ערך מקום שלילי, $-2^{n-1}$.
- לקרוא מספר שלילי: הפוך כל ביט, הוסף 1, ואז השם סימן מינוס מול.
1011 0100הופך ל-0100 1011, פלוס 1 נותן0100 1100$= 76$, ולכן הערך הוא $-76$. בדוק לפי ערך מקומי: $-128 + 32 + 16 + 4 = -76$. ✓ - עבור $n$ ביטים הטווח הוא $-2^{n-1}$ עד $+2^{n-1} - 1$: 8 ביטים נותנים $-128$ עד $+127$, ו-12 ביטים נותנים $-2048$ עד $+2047$. הערך השלילי ביותר הוא 1 שאחריה אפסים; החיובי ביותר הוא 0 שאחריה ones.

11111111 קוראים 255 באופן אחד ו-−1 באופן אחר
סימון מספרים שלמים עם סימן בשלבים משלים
הביט השמאלי ביותר נושא ערך מקום שלילי. הפוך כל ביט — או לחץ על הפך סימן (הפוך כל ביט, ואז הוסף 1) — והצפה לערך הסימני להשתנות.
קרא את המספר משלים שניים בגודל 8 ביט 11111101 כערך עשרוני חתום.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
MSB הוא 1 (שלילי). הפוך → 00000010, הוסף 1 → 00000011 $= 3$, לכן הערך הוא $-3$.
מהו הערך החיובי הגדול ביותר שמספר משלים שניים בגודל 8 ביט יכול להכיל?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
הטווח הוא $-2^{7}$ עד $2^{7}-1$, כלומר $-128$ עד $+127$. המקסימום הוא 01111111 = 127.
דוגמה פתורה: כתוב את −108 ב-12 ביטים
- התחל מ-$+108$ ב-12 ביטים: $108 = 64 + 32 + 8 + 4$, ולכן
0000 0110 1100. - הפוך כל ביט:
1111 1001 0011. הוסף 1:1111 1001 0100. - בדוק עם ערכים מקומיים, כאשר הביט העליון שווה $-2048$: $-2048 + 1024 + 512 + 256 + 128 + 16 + 4 = -108$. ✓
- השגיאה הנפוצה ביותר היא סימן וגודל: הגדרת הביט העליון ל-1 והשארת שארית ללא שינוי. זהו סכמה שונה, ישנה יותר, וקובלת אפס כאן.
כתוב את ⟦-108⟧ כמספר בשלימה של שתיים ב-12 ביטים (אפשר להוסיף רווחים).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
+108 הוא ⟦0000 0110 1100⟧; הפוך ביטים ל-⟦1111 1001 0011⟧ והוסף 1. בדיקה: ⟦-2048 + 1024 + 512 + 256 + 128 + 16 + 4 = -108⟧.
משלים לאחד
- משלים לאחד היא הסכמה הישנה: שלילי מתקבל על ידי הפיכת כל ביט של החיובי, ללא שלב הוספת 1. $+30$ הוא
0001 1110, ולכן $-30$ הוא1110 0001. - החיסרון שלו הוא שני אפסים,
0000 0000ו-1111 1111, מה שמבזבז תבנית ביט ומס complication את האריתמטיקה. - משלים לשניים יש לו אפס אחד ומאפשר לאותו מעגל מחבר לבצע חיסור, ולכן הוא ניצח.
שלימה של אחת מעדיפה על שלימה של שתיים משום שהיא בעלת ייצוג אחד בלבד לאפס.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
המצב ההפוך: לשלימה של אחת יש אפסים כפולים, ⟦+0⟧ ו-⟦-0⟧. לשלימה של שתיים יש ייצוג אחד, והיא מאפשרת למכונת הסיכום לבצע חיסור.
עשרוני קודד בבינארי (BCD)
- ב-עשרוני קודד בבינארי (BCD) כל ספרה עשרונית מאוחסנת בתבנית 4 ביטים עצמאית, תוך שימוש רק ב-
0000עד1001. - 93 ב-BCD הוא
1001 0011, שזה לא אותו דבר כמו 93 בבינארי טהור,0101 1101. קריאת אחד כשני הוא מלכודת נפוצה במבחנים. - שימושים: מחשבים ידניים, שעונים דיגיטליים ותצוגות שבע-סגמנטיות, שבהן כל ספרה מופעלת בנפרד, ו currencies, שבהם BCD נמנע מטעויות עיגול של אחסון $0.1$ בבינארי טהור. העלות היא תבניות מבוזבזות, שכן
1010עד1111לעולם אינם משמשים.

ספרת אחת, ניבל אחד, תצוגה אחת
כתוב את הספרה העשרונית $9$ כתבנית BCD באורך 4 ביטים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
$9$ הוא 1001. ב-BCD לכל ספרה עשרונית מוקצה ניבל בודד (0000–1001).
התאם כל תבנית ביטים למה she היא מייצגת.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
לביטים אין אינדיקציה כיצד לקרוא אותם. הרפרזנטציה המוסכמת קובעת את הערך.
סימונים נופלים מהיד
- הסבר את ההשפה בהתבסס על רוחב הרגיסטר שנתנה בשאלה, ולא ב"היה יותר מ-255".
- כדי להפוך סימן, יש להפוך את כל הביטים ולהוסיף 1. הגדרת הביט העליון ל-1 היא שיטת סימן-גודל, שהיא סכמה שונה לחלוטין.
- בחיסור בתשלום כפול, התוצאה הסופית כוללת הזרקה של הביט המעיל האחרון. שמירתו תניב תשובה בעלת 9 ביטים.
- BCD מאחסן כל ספרה בנפרד; בארכמטיקה טהורה (pure binary) מאחסנים את המספר כולו.
1001 0011הוא 93 ב-BCD ו-147 בארכמטיקה טהורה.
הבנתך מושלמת
- הוסף עמודה אחר עמודה עם הזרקות; השפה היא תוצאה הדורשת יותר ביטים מהרגיסטר יכול להכיל, והתשובה מציינת את רוחב זה.
- חסר על ידי הוספת תשלום כפול: הפוך ביטים והוסף 1, ואז זרק את הביט המעיל האחרון.
- מספרים ממוספרים: הביט הגבוה ביותר (MSB) הוא ביט הסימן ומכיל $-2^{n-1}$; טווח $-2^{n-1}$ עד $+2^{n-1}-1$; לקריאת מספר שלילי, הפוך ביטים, הוסף 1 וקח את הנגדי.
- תשלום משלים (one's complement) פשוט הופך ביטים ולכן יש בו שתי גרסאות לאפס; BCD מאחסן כל ספרה עשרונית בניבל משלו, לשעונים, מחשבים קלקולטורים ומטבעות.