פורסם 2008 באפריל 3017 שנים יש לי כמה שאלות:אני פותר עכשיו תרגיל. בתרגיל יש משתנה מסוג שלם, אני צריך לקלוט מספר בין אחד לשמונה, ואז להוציא את מספר הנורית בפלט.לדוגמא:המשתנה N שווה 4, תדלק הנורה L4 (1000 בבינארי)איך אני הופך את המספר 4 למספר הקסא דצימלי שווה ל1000 בבינארי....ויש קשר להזזה שמאלה\ימינה? (משהו אמר לי על זה משהו)תודה לעונים.
פורסם 2008 במאי 117 שנים אסור!x% חייב לקבל int, לא char, אחרת יש לך דריכת זכרון.לא ממש הבנתי את השאלה, אבל שיטה להמרה בין בינארי לדצימלי ולהיפך:http://he.wikipedia.org/wiki/%D7%91%D7%A1%D7%99%D7%A1_%D7%91%D7%99%D7%A0%D7%90%D7%A8%D7%99
פורסם 2008 במאי 117 שנים מחבר http://he.wikipedia.org/wiki/%D7%91%D7%A1%D7%99%D7%A1_%D7%91%D7%99%D7%A0%D7%90%D7%A8%D7%99לא התכוונתי לזה. סתם ככה להפוך אני יודע. אבל הבעייה היא כזאת:בתרגיל אני צריך לקלוט מהקלט מספר. (משנה - CHAR) המספר הוא בבינארי. ואני צריך להוציא את המספר בהקסא. אם אני קולט 1000 אני צריך להוציא 8. אני לא צריך לעשות משהו מיוחד? הוא אוטומטית הופך? כאילו אם אני יעשה OUTPORTB הוא יוצא במספר הקסא או בינארי?איך זה הולך?מקווה שעכשיו זה יותר ברור.
פורסם 2008 במאי 117 שנים אין לי מושג מה זה outportb...בלינק שנתתי יש הסבר להמיר מבינארי לעשרוני.מעשרוני להקסדצימלי אפשר להמיר בלי בעיה (מדפיסים עם x% במקום d%).
פורסם 2008 במאי 117 שנים מחבר חח אתה יודע מה הפקודה עושה? אני בשוק ( בצחוק ) הפקודה הזאת זה פקודה של קלט ופלט... הפקודות המקבילות בשפת אסמבלר היא IN וOUT
פורסם 2008 במאי 117 שנים בו נניח את הדברים הבאים: יש לך משתנה עם מספר, לדוגמא 8.יש לך port שיכול לקבל או 1 או 0 ואתה צריך עבור המשתנה להוציא שמונה סיביות לפלט, נניח ב-little endian.כלומר עבור הערך "8" אתה רוצה להוציא:out(0);out(0);out(0);out(1);out(0);out(0);out(0);out(0);אם ככה, אתה רוצה את הלולאה הבאה:void f (unsigned char x) /* unsigned is important */{ int i = 0; while( i++ < 8 ) out( (x >> i) & 1 );}
פורסם 2008 במאי 117 שנים מחבר אההה כאילו לעשות לולאה ולכפול ב1 לוגי.... ופשוט מזיזים את המספר ככה שכל פעם יהיה מספר אחר באחדות, שאום בעצם מבודדים עם ה1 לוגי... סבבה ואיך עושים הפוך? מבינארי למספר... כאילו יש לי את ה00001000 ואני צריך להגיע למספר 8... זה יותר מסובך.. :\ או שהוא אוטומטית משנה? כאילו אני קולט בבינארי. ואז אני פשוט משתמש עם אותו משתנה לפעולה אחרת שדורשת הקסא והוא אוטומטית הופך להקסא? כאילו ממשיך רגיל בתרגיל..... ותודה !
פורסם 2008 במאי 117 שנים אסור!x% חייב לקבל int, לא char, אחרת יש לך דריכת זכרון.אנא נמק את דבריך אלה.
פורסם 2008 במאי 117 שנים קבל תיקון - לא דריכת זכרון, סתם קריאה של זכרון לא רלוונטי.הדרך של printf לדעת מה הטיפוסים שהעברת לו היא באמצעות הרצפים המיוחדים (כל ה-% למיניהם).פונקציות ב-C שמקבלות מספר לא מוגדר מראש של משתנים (כמו printf), למעשה מקבלת מערך של בתים ללא טיפוס, וזוהי אחריותה להמיר את המשתנים למה שהם היו במקור.כאשר הפונקציה מקבלת d%, היא יודעת שהיא צריכה לקחת ארבעה בתים (גודל של int, ייתכן שזה שונה במכונות שונות) מהמערך ולהדפיס אותם כמספר דצימלי. כשהיא מקבלת c%, היא צריכה לקחת בית אחד ולהדפיס אותו כתו. כשהיא מקבלת x%, היא צריכה לקחת 4 בתים ולהדפיס אותם כמספר הקסדצימלי, וכן הלאה.כשעושים ככה:printf("%d", 'a');אז אתה בעצם מעביר לפונקציה בית אחד בלבד (שמכיל את התו a), אבל אומר לה לקרוא 4 בתים - ככה שבעצם היא תקרא שלושה בתים של זבל ותדפיס אותם גם (שים לב שיכול להיות שהבתים האלה הם 0, ואז הפונקציה תעבוד באופן תקין).אם רוצים להדפיס את הערך המספרי של תו, אז צריך קודם להמיר אותו ל-int.שים לב שבמקרה ההפוך:char c;scanf("%d", &c);תהיה לך דריכת זכרון של ממש (ה-scanf ימלא 4 בתים, איפה שיש רק בית אחד).
פורסם 2008 במאי 117 שנים בסיס בינארי זה ממש ממש ממש ממש ממש ממש ממש ממש ...ניצנץ! בסיסי.תמצא חומר, אולי בויקיפדיה, ותוודא שאתה מבין את זה.unsigned char g(){ unsigned char x = 0; int i = 0; while ( i++ < 8 ) x = x | ( (unsigned char)input_bit() << 1u ); return x;}יש עוד דרכים, כמובן.
פורסם 2008 במאי 217 שנים קבל תיקון - לא דריכת זכרון, סתם קריאה של זכרון לא רלוונטי.הדרך של printf לדעת מה הטיפוסים שהעברת לו היא באמצעות הרצפים המיוחדים (כל ה-% למיניהם).פונקציות ב-C שמקבלות מספר לא מוגדר מראש של משתנים (כמו printf), למעשה מקבלת מערך של בתים ללא טיפוס, וזוהי אחריותה להמיר את המשתנים למה שהם היו במקור.כאשר הפונקציה מקבלת d%, היא יודעת שהיא צריכה לקחת ארבעה בתים (גודל של int, ייתכן שזה שונה במכונות שונות) מהמערך ולהדפיס אותם כמספר דצימלי. כשהיא מקבלת c%, היא צריכה לקחת בית אחד ולהדפיס אותו כתו. כשהיא מקבלת x%, היא צריכה לקחת 4 בתים ולהדפיס אותם כמספר הקסדצימלי, וכן הלאה.כשעושים ככה:printf("%d", 'a');אז אתה בעצם מעביר לפונקציה בית אחד בלבד (שמכיל את התו a), אבל אומר לה לקרוא 4 בתים - ככה שבעצם היא תקרא שלושה בתים של זבל ותדפיס אותם גם (שים לב שיכול להיות שהבתים האלה הם 0, ואז הפונקציה תעבוד באופן תקין).אם רוצים להדפיס את הערך המספרי של תו, אז צריך קודם להמיר אותו ל-int.שים לב שבמקרה ההפוך:char c;scanf("%d", &c);תהיה לך דריכת זכרון של ממש (ה-scanf ימלא 4 בתים, איפה שיש רק בית אחד).מממ... טוב לדעת.יתכן כי זה לא תקף בכל הקומפיילרים? כי אני זכור שעבדתי ככה די הרבה זמן ועוד עם ק/פ להתקנים חיצוניים והכל היה בסדר. אולי, כפי שאמרת, במזל.
פורסם 2008 במאי 217 שנים זה תלוי בפלטפורמה, בקומפיילר, בקוד שלך, ובמצב הירח. אם c הוא משתנה אוטומטי, והקומפיילר הקצה ל-char שלך sizeof(int) בתים על המחסנית, אז לא תהיה בעיה. או אולי איזור הזכרון שאחרי c אינו בשימוש.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.