מס' בינארי

yhaim

New member
מס' בינארי

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

gilad_no

New member
רק אם אתה יודע את הגודל שלה

אם כן, אתה צריך ליישר אותו לכפולות של 4 (במקרה הצורך - להוסיף אפסים לתחילת הרשימה), ואז להדפיס את הערך של כל 4 סיביות. כל 4 סיביות - תו אחד בהקסדצימלי.
 
גם אם לא יודעים את הגודל שלה...

אם הרשימה מתחילה מה-LSB, אז כמו שאמר גלעד - כל 4 ספרות תתרגם לספרה Hex אחת - אם הרשימה הגיעה לסוף, תתרגם רק את הסיביות שקראת. גם אם הרשימה מתחילה מה-MSB, תמיד אפשר לרוץ עליה פעם אחת לפני שמתחילים ולברר לבד את הגודל שלה...
 
מה זאת אומרת?...../images/Emo26.gif

הייצוג של מספר בזכרון הוא בכל מקרה בינארי. אתה מתכוון איך להדפיס את המספר בפורמט הקסה? ככה נראה לי:
printf("In Hex: %x\n",mynum);​
 

gilad_no

New member
קצת מתמטיקה:

2 בחזקת 4 יוצא 16. זאת אומרת, כל 4 ספרות בינאריות - זו סיפרת הקס אחת. חבר כל 4 ספרות, וייצא לך מספר בין 0-15. ואז כל מה שנשאר לך זה להדפיס את הייצוג ההקסי שלו (0-F)
 

זהיר

New member
גם לא חייבים לרוץ פעמיים

אם עושים "הכנה" מראש (מתאים למקרה שיש הרבה מקרים מסוג זה) או חישוב "במקביל".
 
למעלה