עבור לתוכן

צריך לדעת איך מדפיסים מספר בינארי ב-C

Featured Replies

פורסם

יש לי מספר עשרוני שאני רוצה להדפיס כמספר בינארי (האורך לא קבוע ואי אפשר לתחום אותו) האם יש איזה פונקציה או פקודה ב printf שעוזרת להדפיס מספר כזה ?

פורסם

תבנה פונקציה שלוקחת כקלט את המספר העשרוני מחלקת אותו ב2 ומדפיסה למסך את השארית וחוזר חלילה עד שאתה מגיע ל1

המספר המתקבל בצורה זו הוא הייצוג הבינארי של המספר העשרוני

פורסם

אין כזאת פונקציה בשפה (קצת מוזר לא?) לכן אתה צריך ללכת על הכיוון ש-rosher הציע ולבנות פונ' כזו לבד.

פורסם
  • מחבר

הבעיה היא שיש צורך להפוך את סדר ה1\0 לאחר הדפסה כדי לכבל מספר בינארי חוקי. פונקציה כזו אין ביעה לכתוב אך הבעיה היא ההפיכה

פורסם

אז במקום לכתוב פונ' שמדפיסה בינארי, תכתוב פונ' שמחזירה מחרוזת של 0,1 ואז תכתוב פונ' נוספת שהופכת את המחרוזת.

פורסם
  • מחבר

זה בדיוק מה שעכשיו עשיתי :smile1:

תודה צביקה :xyxthumbs:

פורסם
  • מחבר

הגעתי בעזרתו של חבר לפתרון יעיל יותר :

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

(אין שימוש בString)

פורסם

קריאה לפונקציה זה יותר יקר מאשר לשמור מחרוזת בזיכרון

פורסם
  • מחבר

יש הגבלה בסיבוכיות מקום אך לא בסיבוכיות זמן

פורסם

רקורסיה זה ממש טוב במקרה הזה :)

פורסם

אתה יכול לעשות את זה בלולאה פשוטה בלי שום מחרוזת עם שימוש באופרטורים בולאיינים

הרעיון הוא לשמור מספר

i=2^n

ולעשות לולאה שכל צעד שלה אתה מדפיס את המספר שלך & i עם הזזה של n סיביות ימינה ולחלק את i הזה ב-2 (את החילוק אפשר לעשות מהר יותר אם תעשה i=i<<1 שזה הזזה של סיבית אחת ימינה)

פורסם

מה N מייצג HOLY?

פורסם

בהתחלה

i=2^n

כאשר n יכול להיות חצי האורך של integer (כלומר n=15)

בכל איטרציה אתה מחלק את i ב-2 (חילוק מהיר ע"י הזזה של סיבית אחת ימינה) ומקטין אינדקס n שאתה שומר ב-1

פורסם

תשתמש בפונקציה itoa(int num,char* str,int base)

הפונקציה מקבלת מספר num ובסיס הפלט ושמה ב-str את המחרוזת

שהיה יצוג בינרי של num בבסיס base.

למשל itoa(9,str,2)

ישים ב-str:

1001

http://www.cplusplus.com/ref/cstdlib/itoa.html

פורסם

שימוש ברקורסיה הוא גרוע

עדיף לעשות לולאה

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים