You are on page 1of 37

‫מערכות ספרתיות‬

‫‪2020-2021‬‬

‫קודים בינאריים‬
‫חלק ‪1‬‬
‫תוכנית‬
‫• מהם קידודים בינאריים?‬
‫• דוגמאות לקידודים‬
‫ייצוג מספרים‬
‫• אמרנו שאפשר לייצג מספרים בבסיסים שונים‬
‫– ‪10,8,16,2‬‬
‫• גם באותו בסיס קיימים יצוגים שונים לשליליים‬
‫– משלים‪ ,2-‬משלים‪ 1-‬בבסיס ‪2‬‬
‫• עד עכשיו‪ :‬חיוביים ייוצגו תמיד באותה דרך‬
‫(כשמדובר באותו בסיס)‬
‫• לפעמים אנו עשויים לרצות ייצוגים שונים (למספרים‬
‫חיוביים) באותו בסיס‬
‫– אלה הם קידודים‬
‫קודים בינאריים‬
‫• דרך כללית יותר לייצג מספרים בעזרת ספרות‬
‫בינאריות‬
‫– עכשיו אפשר לקבל ייצוג בינארי אחר של מספר‬
‫– לא בהכרח המספר בבסיס ‪( 2‬ע"י חלוקה ב‪ 2-‬וכו')‬

‫• למשל‪ ,‬ייצוג כל ספרה עשרונית ע"י ‪ 7‬ביטים‬


‫נראה בהמשך‬ ‫– שיכילו גם מידע שיסייע לאיתור שגיאות‬

‫• למשל‪ :‬ראינו ‪ 3‬שיטות "לקודד" את ‪-2‬‬


‫קידוד ‪ -‬הגדרה‬
‫• הגדרה‪ :‬ייצוג של ‪ n‬עצמים בעזרת ‪ m‬ספרות‬
‫– קיימת פו' חד‪-‬חד ערכית מהעצמים לייצוגים‬
‫– עצמים = מספרים \ ספרות בדרך כלל‬
‫– הפו' אינה על‪ ,‬כלומר לא בהכרח לכל צרוף ספרות‬
‫מתאים אובייקט‬
‫• קידוד בינארי‪ :‬ייצוג של ‪ n‬עצמים בעזרת ‪ m‬ספרות‬
‫בינאריות‬
‫– נזכור כי בעזרת ‪ m‬ספרות אפשר לייצג 𝑚‪ 2‬מספרים‬
‫– ולכן 𝑚‪n<= 2‬‬
‫קידוד ‪ -‬דוגמאות‬
‫• למשל ייצוג ספרה דצימאליות בעזרת ‪ 4‬בינארית‬
‫ייצוג ‪ 1‬ע"י ‪0001‬‬

‫• למשל ייצוג שבו ההבדל בין ‪ 2‬מספרים סמוכים‬


‫הוא תמיד ביט יחיד‬
‫מדוע זה לא‬
‫מתקיים בד"כ?‬
‫• יתרון ‪-‬דרישות שנוכל לקיים‪:‬‬
‫– קלות המעבר ממספר עשרוני לבינארי‬
‫– מינימום שינויים בביצוע ‪ +1‬או ‪-1‬‬
‫– גילוי ותיקון שגיאות תקשורת‬
‫ייצוג בינארי ‪ -‬דוגמא‬
‫• כמה דרכים שונות יש לייצוג מספרים עשרוניים‬
‫בעזרת מספרים בינאריים?‬
‫– נניח שמספר הביטים בדיוק מספיק‬
‫– כלומר מספר העשרוניים = מספר הבינאריים בייצוג‬

‫• נתבונן בדוגמא‪...‬‬
‫קידוד ‪ 4‬ספרות‬
‫• לדוגמא ‪ 2 :‬ביטים‬
‫– כמה דרכים שונות קיימות לייצוג בינארי של מספר עשרוני‬
‫– המספר בין ‪ 0‬ל‪?3-‬‬
‫• משתמשים ב‪ 2-‬ביטים לייצוג‬

‫בסיס ‪10‬‬ ‫ייצוג בינארי‬ ‫ייצוג בינארי‬ ‫‪...‬‬ ‫ייצוג בינארי‬


‫‪1‬‬ ‫‪2‬‬ ‫‪n‬‬

‫‪0‬‬ ‫‪00‬‬ ‫‪01‬‬ ‫‪...‬‬ ‫‪11‬‬


‫‪1‬‬ ‫‪01‬‬ ‫‪00‬‬ ‫‪...‬‬ ‫‪10‬‬
‫‪2‬‬ ‫‪10‬‬ ‫‪10‬‬ ‫‪...‬‬ ‫‪01‬‬
‫‪3‬‬ ‫‪11‬‬ ‫‪11‬‬ ‫‪...‬‬ ‫‪00‬‬

‫‪n‬‬ ‫?=‪n‬‬
‫עשרוני‬ ‫בינארי‬ ‫קידוד ‪ 4‬ספרות‬
‫‪0‬‬ ‫‪00‬‬

‫‪1‬‬ ‫‪01‬‬

‫‪2‬‬ ‫‪10‬‬

‫‪3‬‬ ‫‪11‬‬
‫• ניסוח שקול‪:‬‬
‫• כמה דרכים שונות קיימות לסדר את השורות של‬
‫העמודה הימנית?‬
‫– כל סידור כזה מייצג התאמה אחרת‬
‫– (או קידוד בינארי אחר)‬

‫• תשובה‪ 4! = 24 :‬קידודים שונים‬


‫– עצרת‪ :‬סידור עצמים בשורה‬
‫קודים בינאריים‬
‫• הפונקציה אינה פונקציה‪-‬על ולכן‬
‫• מותר גם להשתמש ביותר ביטים מהמינימום הדרוש‬
‫– למשל‪ :‬אפשר לייצג את ‪ 2‬ע"י ‪00010‬‬
‫– עשוי לתת יתרון בחישוב או בקריאות‬

‫– חיסרון‪ :‬בזבזני בייצוג )‪(No Free Lunch‬‬


‫תוכנית‬
‫• מהם קידודים בינאריים?‬
‫• דוגמאות לקידודים‬
‫( ‪)Binary Coded Decimal‬‬ ‫– קוד ‪8421 BCD‬‬
‫– קוד ‪Gray‬‬
‫– קוד ‪ASCII‬‬
‫– קוד לזיהוי שגיאות‬
‫– קוד לתיקון שגיאות‬
‫קודים בינאריים‬
‫• אפשר גם להשתמש ביותר ביטים מהמינימום הדרוש‬
‫– עשוי לתת יתרון בחישוב או בקריאות‬
‫– אבל בזבזני בייצוג )‪(No Free Lunch‬‬
‫עשרוני‬ ‫בינארי‬

‫‪0‬‬ ‫‪0000‬‬ ‫• למשל ייצוג ספרות ע"י ‪ 4‬ביטים‬


‫‪1‬‬ ‫‪0001‬‬
‫– למספר ‪ 10‬צריך כבר ‪ 8‬ביטים‬
‫‪2‬‬ ‫‪0010‬‬

‫…‬ ‫‪...‬‬

‫‪9‬‬ ‫‪1001‬‬

‫‪10‬‬ ‫‪0001 0000‬‬


‫קוד ‪(BCD) 8421‬‬
‫עשרוני‬ ‫בינארי‬
‫• ייצוג ספרות עשרוניות‬
‫‪0‬‬ ‫‪0000‬‬
‫– כמה ביטים נדרשים?‬
‫‪1‬‬ ‫‪0001‬‬
‫• נקודד בעזרת ‪ 4‬ביטים‬
‫‪2‬‬ ‫‪0010‬‬
‫– ספרה שמאלית = ‪8‬‬
‫…‬ ‫‪...‬‬
‫– ‪...‬‬
‫‪9‬‬ ‫‪1001‬‬
‫– ספרה ימנית = ‪1‬‬
‫‪10‬‬ ‫‪00010000‬‬
‫• ‪ 9..0‬מקודדים בדיוק כפי שראינו‬
‫‪11‬‬ ‫‪00010001‬‬
‫אז מה החידוש?‬
‫‪...‬‬ ‫‪...‬‬

‫‪99‬‬ ‫‪1001 1001‬‬


‫קוד ‪(BCD) 8421‬‬
‫עשרוני‬ ‫בינארי‬

‫‪0‬‬ ‫‪0000‬‬
‫• ‪ 10‬ייוצג ע"י ‪ 8‬ביטים‪:‬‬
‫‪1‬‬ ‫‪0001‬‬ ‫‪00010000‬‬
‫‪2‬‬ ‫‪0010‬‬ ‫• ‪:11‬‬
‫…‬ ‫‪...‬‬ ‫‪00010001‬‬
‫‪9‬‬ ‫‪1001‬‬ ‫• ‪:12‬‬
‫‪10‬‬ ‫‪00010000‬‬ ‫‪00010010‬‬
‫‪11‬‬ ‫‪00010001‬‬
‫• ‪...‬‬
‫‪...‬‬ ‫‪...‬‬

‫‪99‬‬ ‫‪1001 1001‬‬


‫)‪Binary Coded Decimal (BCD‬‬
‫• יותר נוח לנו לחשוב על מספרים "באופן דצימאלי"‪.‬‬
‫• דצימאלי מקודד בינארית‪ -‬קידוד "דמוי דצימאלי"‪.‬‬
‫• כל ספרה דצימאלית מקודדת בנפרד ע"י קוד ‪.8421‬‬
‫‪Dec.‬‬ ‫‪BCD‬‬
‫‪374‬‬ ‫‪0011 0111 0100‬‬
‫‪3‬‬ ‫‪7‬‬ ‫‪4‬‬
‫‪99‬‬ ‫‪1001 1001‬‬
‫‪9‬‬ ‫‪9‬‬
‫‪0101 0100 1001‬‬
‫‪549‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪9‬‬
‫טווח הייצוג‬
‫• בית (‪ )Byte‬אחד הוא שמונה ביטים‬
‫– מאחסן שתי מילות‪-‬קוד של קוד ‪8421‬‬
‫• לכן‪ ,‬בקוד ‪ BCD‬ניתן לייצג בבית אחד‪:‬‬
‫– את הערכים ‪,0 − 99‬‬
‫– כלומר ‪ 100‬ערכים שונים‪.‬‬
‫• בייצוג הבינארי הרגיל‪:‬‬
‫– בית == ‪ 8‬ביטים == ‪ 256‬ערכים שונים‪.‬‬
‫• כלומר עכשיו משתמשים רק ב‪ 100-‬מתוך ‪256‬‬
‫בזבזני‬
‫ייצוג מספר בן ‪ k‬ספרות‬
‫• כמה ביטים נדרשים לייצוג ‪ k‬ספרות דצימאליות ב‪?BCD-‬‬
‫‪4k‬‬

‫• מספר הספרות הבינאריות בייצוג בינארי רגיל‬


‫‪ k‬ספרות ‪ ‬המספר חסום ע"י ‪10𝑘 :‬‬
‫‪ ≤ log2(10𝑘 )≤3.3k‬ספרות בינאריות‬
‫• ‪ 4k‬לעומת ‪  3.3k‬תוספת של ‪20%‬‬

‫• הניתוח קצת קשה‪...‬‬


‫𝟐‬ ‫𝟎𝟎𝟎𝟏‬ ‫רשות‪ :‬ייצוג המספר‬
‫• ספרות דצימאליות‬
‫‪log102=0.3‬‬
‫– ) ‪log10(21000‬‬
‫– ‪~1000*log102=~ 301‬‬
‫‪ ‬כ‪ 300‬ספרות דצימאליות במספר‬
‫• ייצוג בינארי סטנדרטי‬
‫– ‪ 1001‬ספרות בינאריות‬
‫• ספרות בינאריות ב‪:BCD-‬‬
‫האם זו‬ ‫– ‪ 1204 = 4 * 301‬ספרות בינאריות‬
‫נוסחא כללית?‬

‫‪ BCD ‬דורש כ‪ 120%-‬גודל האחסון שדרוש בקידוד‬


‫סטנדרטי עבור גודל זה‬
‫– ‪1204/1001‬‬
Dec. Bin. (4bit blocks) BCD
0 0000 0000
1 0001 0001
2 0010 0010
… … …
9 1001 1001
10 1010 00010000
11 1011 00010001
12 1100 00010010
… … …
99 01100011 10011001
100 01100100 000100000000
101 01100101 000100000001
… … …
374 000101110110 001101110100
375 000101110111 001101110101
… … ….
4013 111110101101 0100000000010011
4014 111110101110 0100000000010100
… … …
‫אריתמטיקה‬
‫• דוגמא פשוטה‪ :‬כמה הם ‪?14+9‬‬
‫‪Dec.‬‬ ‫‪Bin.‬‬ ‫‪BCD‬‬
‫‪14‬‬ ‫‪1110‬‬ ‫‪00010100‬‬
‫‪+ 9‬‬ ‫‪+ 1001‬‬ ‫‪+‬‬ ‫‪1001‬‬
‫‪23‬‬ ‫‪10111‬‬ ‫??????????‬

‫אם נחבר את הספרות שבייצוג ‪ ,BCD‬נקבל‪0001𝟏𝟏𝟎𝟏 :‬‬


‫• אבל‪ 1101 -‬אינו מייצג אף ספרה ב‪...BCD-‬‬
‫• תיקון‪ :‬תוספת ‪0110‬‬
‫‪0001 1101‬‬ ‫תוצאה קודמת =‬
‫‪0000 0110‬‬ ‫תיקון =‬
‫• ‪ :6‬ההפרש בין ‪ 9‬לבין ‪15‬‬
‫‪0010 0011‬‬ ‫‪= 23‬‬
‫יתרונות וחסרונות‬
‫• היתרון המרכזי‪ :‬פשטות קידוד ופענוח – קל לעבור‬
‫מייצוג דצימאלי ל‪ BDC-‬ולהיפך‪.‬‬

‫• חסרון – בזבוז מקום‬


‫• חסרון ‪ -‬חוקי האריתמטיקה הבסיסיים אינם‬
‫תופסים ישירות (צריך לתקן)‪...‬‬
‫תוכנית‬
‫• מהם קידודים בינאריים?‬
‫• דוגמאות לקידודים‬
‫( ‪)Binary Coded Decimal‬‬ ‫– קוד ‪8421 BCD‬‬
‫– קוד ‪Gray‬‬
‫קוד ‪ -- Gray‬מוטיבציה‬
‫• נתמקד בשתי מילות קוד שמייצגות מספרים רצופים‬
‫– ייצוג בינארי רגיל‬
‫• למשל‪:‬‬
‫𝟏𝟎𝟎𝟎𝟏𝟎𝟎𝟎‬ ‫𝟏𝟏𝟏𝟏𝟏𝟏𝟎𝟏‬ ‫𝟏𝟎𝟏𝟎𝟏𝟏𝟏𝟎𝟎‬ ‫𝟎𝟎𝟎𝟎𝟎𝟎𝟎𝟎‬
‫𝟎𝟏𝟎𝟎𝟏𝟎𝟎𝟎‬ ‫𝟎𝟎𝟎𝟎𝟎𝟎𝟏𝟏‬ ‫𝟎𝟏𝟏𝟎𝟏𝟏𝟏𝟎𝟎‬ ‫𝟏𝟎𝟎𝟎𝟎𝟎𝟎𝟎‬

‫בכמה סיביות‬
‫שונים המספרים‬
‫זה מזה?‬
‫• רוצים ייצוג בינארי כך ש‪:‬‬
‫– שתי מילים סמוכות (כולל האחרונה והראשונה) שונות‬
‫בסיבית אחת בדיוק‪.‬‬
‫ סטנדרטי‬Gray Code
Gray ‫קוד‬ Gray ‫קוד‬
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000
‫קוד גריי‬
‫• פרנק גריי (‪.)1887-1969‬‬
‫• פיזיקאי‪ ,‬חוקר במעבדות ‪.Bell‬‬
‫• המציא את הקוד הקרוי על שמו‬
‫בשנת ‪ 1945‬לצורך מיזעור‬
‫שגיאות בציוד אלקטרומגנטי‪.‬‬
‫בניה של קוד ‪Gray‬‬
‫• סטנדרטי (יש עוד)‬
‫נקרא גם‬ ‫בעזרת לולאה‬
‫"קוד משוקף"‬ ‫בניית קוד גריי בעל 𝑛 סיביות‪:‬‬
‫‪𝑚←1 ‬‬
‫‪ ‬כתוב ‪ 0‬ו‪1 -‬‬
‫‪ ‬כל עוד 𝑛 ≤ 𝑚‬
‫‪ ‬מתחת לקוד הנוכחי‪ ,‬כתוב שיקוף שלו (העתק אותו בסדר הפוך של‬
‫המילים)‪.‬‬
‫‪ ‬הוסף ‪ 0‬בתחילת המילים ה"מקוריות" ו‪ 1-‬למילים ברשימה‬
‫המשוקפת‪.‬‬
‫‪𝑚 ← 𝑚 +1 ‬‬
‫‪0‬‬ ‫‪:‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪:‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪:‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪:‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫דוגמא‪ :‬בניה של‬
‫‪4‬‬ ‫‪:‬‬
‫‪5‬‬ ‫‪:‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬ ‫קוד ‪Gray‬‬
‫‪6‬‬
‫‪7‬‬
‫‪:‬‬
‫‪:‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫בן 𝑛 סיביות‬
‫‪8‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪9‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪10‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪11‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬
‫‪12‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬
‫‪13‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪14‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫מהו ההבדל‬
‫‪15‬‬ ‫‪:‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫לעומת הספירה‬
‫הבינארית הרגילה?‬
‫קודי גריי לא סטנדרטיים‬
‫• ראינו איך לבנות קוד‪-‬גריי מלא מעל 𝑛 סיביות‬
‫קוד ‪Gray‬‬ ‫• האם אפשר לבנות קוד גריי אחר?‬
‫– (מלא)‬
‫‪0‬‬ ‫‪000‬‬
‫• ‪ 2‬תנאים‪:‬‬
‫‪1‬‬ ‫‪001‬‬
‫‪ .1‬לכל ספרה מותאם קידוד משלה‬
‫‪2‬‬ ‫‪011‬‬ ‫‪ .2‬ההבדל בין ‪ 2‬קודים סמוכים הוא ‪1‬‬
‫‪3‬‬ ‫‪010‬‬
‫‪4‬‬ ‫‪110‬‬ ‫אפשרות א' ‪:offset -‬‬
‫‪5‬‬ ‫‪111‬‬ ‫‪ 0‬ייוצג ע"י תא אחר בטבלא (לא ‪)000‬‬ ‫–‬
‫‪6‬‬ ‫‪101‬‬ ‫‪ :1‬התא מתחתיו (או מעליו)‬ ‫–‬
‫‪7‬‬ ‫‪100‬‬ ‫או מעליו‬ ‫–‬
‫דוגמא לקוד לא סטנדרטי‬

‫קוד ‪Gray‬‬ ‫קידוד גריי אפשרי ע"י היסט‪:‬‬


‫‪0‬‬ ‫‪000‬‬ ‫‪offset‬‬
‫‪010 = 0‬‬
‫‪1‬‬ ‫‪001‬‬ ‫‪110 = 1‬‬
‫‪2‬‬ ‫‪011‬‬ ‫‪111 = 2‬‬
‫‪101 = 3‬‬
‫‪3‬‬ ‫‪010‬‬
‫‪100 = 4‬‬
‫‪4‬‬ ‫‪110‬‬
‫‪000 = 5‬‬
‫‪5‬‬ ‫‪111‬‬ ‫‪001 = 6‬‬
‫‪6‬‬ ‫‪101‬‬ ‫‪011 = 7‬‬
‫‪7‬‬ ‫‪100‬‬
‫אפשרויות אחרות‬
‫קוד ‪Gray‬‬ ‫החלפת‬
‫עמודות ‪1-2‬‬ ‫• החלפת עמודות‬
‫‪0‬‬ ‫‪000‬‬ ‫‪000‬‬
‫‪1‬‬ ‫‪001‬‬ ‫‪010‬‬ ‫• החלפה ‪ +‬היסט‬
‫‪2‬‬ ‫‪011‬‬ ‫‪011‬‬
‫‪3‬‬ ‫‪010‬‬ ‫‪001‬‬ ‫• ‪...‬‬
‫‪4‬‬ ‫‪110‬‬ ‫‪101‬‬
‫‪5‬‬ ‫‪111‬‬ ‫‪111‬‬
‫‪6‬‬ ‫‪101‬‬ ‫‪110‬‬
‫‪7‬‬ ‫‪100‬‬ ‫‪100‬‬
‫‪n-cube‬‬
‫• זהו ייצוג גיאומטרי של קוד בן 𝑛 סיביות‪.‬‬
‫• 𝑒𝑏𝑢𝑐 ‪ 𝑛 −‬הינו אובייקט עם 𝑛‪ 2‬קודקודים‪:‬‬
‫‪ n=1‬יש שתי מילות קוד חוקיות ולכן נקבל קטע‬ ‫–‬
‫‪ n=2‬נקבל ריבוע עם ‪ 4‬קודקודים‬ ‫–‬
‫‪ n=3‬נקבל קוביה עם ‪ 8‬קודקודים‬ ‫–‬
‫‪...‬‬ ‫–‬
‫כדי ליצור קוד גריי חדש‪:‬‬
‫‪ .1‬נבנה קוביה מממד מתאים‬
‫‪ .2‬נבנה קוד חדש ע"י טיול על גבי הקוביה‬
‫הטיול צריך לקיים ‪ 2‬תנאים‪:‬‬
‫א‪ .‬עוברים רק בין קדקדים סמוכים‬
‫ב‪ .‬מבקרים בכל קדקד בדיוק פעם אחת‬
‫למשל‪ :‬יצירת קידוד‬
‫ל‪ 8-‬ספרות‬
‫ע"י טיול‬
‫קוד גריי למספר‪Gray(n) :‬‬

‫• ראינו איך לבנות קוד‪-‬גריי מלא מעל 𝑛 סיביות‬


‫• ואם רוצים קוד‪-‬גריי למספר מסויים?‬
‫– מבלי לבנות את כל הקוד‬
‫– מתוך ייצוג בינארי‬
‫• וגם‪ :‬בהינתן מילת‪-‬קוד בקוד‪-‬גריי‪ ,‬איך יודעים איזה מספר‬
‫היא מייצגת‪ ,‬מה מיקומה הסידורי בקוד?‬

‫• חשוב לציין שמדובר בקידוד גריי סטנדרטי‬


‫𝟏 𝟏 𝟎 𝟏‬ ‫מדוע?‬
‫ממספר לקוד‪-‬גריי שלו‬
‫• מציאת קוד‪-‬גריי ‪ 𝑔𝑛 𝑔𝑛−1 ⋯ 𝑔1 𝑔0‬של מספר מתוך‬
‫הייצוג הבינארי שלו‪.𝑏𝑛 𝑏𝑛−1 ⋯ 𝑏1 𝑏0 ,‬‬
‫‪A‬‬ ‫‪B‬‬ ‫‪A XOR B‬‬ ‫מתחילים משמאל‬ ‫‪MSB : 𝑔𝑛 = 𝑏𝑛 ‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪ ‬לכל 𝑛 < 𝑖 ≤ ‪: 0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪𝑔𝑖 = 𝑏𝑖 𝑿𝑶𝑹 𝑏𝑖+1 ‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪( ‬בעצם‪ 𝑏𝑖 + 𝑏𝑖+1 :‬ללא נשא)‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫𝟑𝟏‬ ‫=‬ ‫‪𝟏 𝟏 𝟎 𝟏2‬‬


‫= 𝟑𝟏 𝒚𝒂𝒓𝑮‬ ‫𝟏 𝟏 𝟎 𝟏‬
‫פעולה הפוכה‪ :‬מקוד‪-‬גריי לייצוג בינארי‬
‫• מציאת ייצוג הבינארי ‪ 𝑏𝑛 𝑏𝑛−1 ⋯ 𝑏1 𝑏0‬של מספר‬
‫שקוד‪-‬גריי שלו הוא ‪.𝑔𝑛 𝑔𝑛−1 ⋯ 𝑔1 𝑔0‬‬
‫• לכל 𝑛 ≤ 𝑖 ≤ ‪: 0‬‬

‫𝑖𝑔‬ ‫𝒏𝒆𝒗𝒆 𝑒𝑟𝑎 𝑖𝑔 𝑓𝑜 𝑑𝑟𝑎𝑤𝑡𝑓𝑒𝑙 𝑠‪𝑖𝑓 1‬‬


‫= 𝑖𝑏 •‬
‫𝑖𝑔‬ ‫𝑒𝑠𝑙𝑒‬
‫הביט ההפוך ל‪𝒈𝒊 -‬‬
‫הפוך‪ :‬מקוד‪-‬גריי לייצוג בינארי‬
‫• דוגמא (היפוך הדוגמא הקודמת)‪:‬‬
‫– ‪ 1011‬נתון בקוד גריי סטנדרטי‬
‫– איזה מספר בינארי הוא מייצג?‬
‫‪ :0‬לא כולל‬
‫האינדקס שלו‬ ‫• חישוב‪:‬‬
‫– ‪ 1‬שמאלי – מספר אחדות זוגי לשמאלו ‪ -‬נשאר ‪1 ‬‬
‫– ‪ 0‬שני – מספר איזוגי לשמאלו ‪ -‬מתהפך ‪1 ‬‬
‫– ‪ 1‬שלישי – מספר איזוגי לשמאלו – מתהפך ‪0 ‬‬
‫– ‪ 1‬ימני – מספר זוגי לשמאלו – נשאר ‪1‬‬
‫סוף חלק ‪1‬‬

You might also like