בינארי

בינארי

35D - 105D​
אני עושה 35 + מינוס 105. לאחר שאני ממיר חזרה לעשרוני זה לא יוצא מינוס 70. איך פותרים את זה?
 

immortalus

New member
תשובה

א) באיזה ייצוג אתה משתמש? סיבית סימן? 1s complement ?2s complement? ב) האם בדקת אם יש לך בחשבון גלישה(overflow)? בד"כ עובדים בשיטת 2s complement, ומספרים שליליים מיוצגים בה ע"י היפוך הסיביות והוספת אחד: 105 = 1101001 105- = 0010110 + 1 = 0010111 35 = 100011 אבל אין ב-6 וב-7 סיביות ייצוג למספר גדול כמו 70, ולכן נאלץ לעבוד ב-8 סיביות לפחות שזה הגודל הראשון שיכול לקחת 128- עד 127 שכולל את 70. ולכן: 105- = 10010111 (מספר שלילי מרחיבים ע"י הוספת אחדים) 35 = 00100011 (מספר חיובי מרחיבים ע"י הוספת אפסים) ואתה רוצה לעשות: 10010111+ 00100011 ====== 10111010 = 186 = 70-
 
הבנתי עכשיו ../images/Emo13.gif לא ידעתי ש..

למספר שלילי מוסיפים 1ים (וזה גם די הגיוני).
 

immortalus

New member
מעבר מבסיס עשרוני לבינארי

טוב, זה מעבר קצת קשה... אתה צריך לבנות טבלת חלוקה עם שארית ולזכור שאריות. בנוסף, לא תגיע מיידית ל- 70- אלא למספר חיובי - 186. לאחר מכן, תצטרך לדעת לפי התרגיל שלך איך להתייחס למספר (signed/unsigned) מעבר מבסיס עשרוני לבסיס בינארי: אתה לוקח את המספר העשרוני שלך ומתחיל לחלק אותו פי 2, כאשר בכל שלב אתה ממלא טבלה בת 3 עמודות: המספר הנוכחי, החלק השלם, שארית החלוקה ב-2. נציג את השיטה באמצעות דוגמא על 186:
num || div || mod 186 _ 93 __ 0 93 _ 46 _ _ 1 46 _ 23 _ _ 0 23 _ 11 _ _ 1 11 __ 5 _ _ 1 5 ___ 2 __ 1 2 ___ 1 __ 0 1 ___ 0 __ 1 0 ___ 0 __ 0 - שלב מיותר​
סליחה על הסדר, ניסיתי כמה שיכולתי. בכל שלב, אני לוקח את המספר (num) ומחלק אותו פי 2. את החלק השלם (div) אני רושם בעמודה אחת, ואת שארית החלוקה (mod) בעמוד שניה. בשלב הבא, אני משתמש באיבר ה-DIV האחרון עד שאני מגיע ל-DIV שהוא 0, ואז התהליך מסתיים. כעת אני רושם את עמודת ה-MOD מלמטה למעלה: 10111010 והפלא ופלא, קיבלנו את מספר הקסם שלנו
כעת כדי לדעת איזה מן מספר שלילי קיבלנו, נהפוך אותו לחיובי (ונוסיף את המינוס א"כ
): 10111010 - נהפוך את הסיביות (0 - 1) ונוסיף אחד בסוף - שיטת 2s complement 01000101 + 1 = 01000110 = 70 (תבדוק במחשבון של WINDOWS אם אתה לא מאמין
)
 

immortalus

New member
המרה של מספר בינארי לעשרוני

מכל בסיס לעבור לייצוג העשרוני הוא הדבר הפשוט ביותר (ההפך קשה קצת יותר). *קודם כל אבקש להסכים איתי שהסימן הבא: ^ מסמן חזקה
רשום את המספר שלך, ומעל לכל ספרה בו את האינדקס של הספרה (רצוי בקטן) 0 1 2 3 4 5 6 7 0 0 0 0 0 1 1 1 כעת, המספר בייצוג עשרוני מתקבל בדרך הבאה:
decimal = sum(n*2^i) | 0<=i<=7

כאשר n הוא מערך הסיביות שלך. לכן המספר שלך הוא:
decimal = 0*(2^0) + 0*(2^1) + 0*(2^2) + 0*(2^3) + 0*(2^4) + 1*(2^5) + 1*(2^6) + 1*(2^7) = 224​
מקווה שההסבר היה ברור
 

immortalus

New member
../images/Emo41.gif תוספת חשובה לשני התשובות האחרונות!

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