עבור לתוכן

עזרה שפת -c

Featured Replies

פורסם

שלום לכולם.

התבקשתי לרשום תוכנית שתקבל מספר בינארי ותדפיס הקסדצימאלי

התוכנית צריכה לקלוט את המספר כמשתנה שלם int ולהדפיס את הייצוג ההקסדצימלי הפוך.

רשמתי את התוכנית הבאה


#include<stdio.h>
int main()
{
long int num_b,num_h=0,j=1,sherit;
printf("Enter any number any binary number: ");
scanf("%ld",&num_b);
while(num_b!=0){
sherit=num_b%10;
num_h+=sherit*j;
j=j*2;
num_b/=10;
}
printf(" hexadecimal: %lX",num_h);
return

0;

כשאני מכניס 11111111 התוכנית אכן מדפיסה ff אך שזה מעל 8 ספרות נוצר בלאגן.

אשמח לעזרה.

פורסם

אל תתרגם כל ביט של קלט כמספר עשרוני.

פורסם

שלום וברוך הבא לפורום.

תערוך בבקשה את ההודעה הראשונה ותעטוף את הקוד בתגית קוד (לחץ על עריכה > מצב מתקדם, בחר את הקוד ולחץ על כפתור עם ציור #) כדי שיהיה יותר קריא.

לשאלתך: כמה ספרות ניסית להכניס, ובאיזו קומפיילר / סביבת פיתוח אתה משתמש?

פורסם
  • מחבר

ניסיתי להכניס 16 ספרות שיצא לי FFFF

אני משתמש code block

פורסם

בפלטפורמות מסויימות long int הוא רק 32 ביט, שאומר שהוא יכול להכיל רק עד בערך 10 או 11 ספרות. אם אתה מנסה להכניס מספר יותר גדול מזה אתה תקבל גלישה נומרית.

תנסה להחליף את ה-long int ב-long long int או ב-int64_t.

לחילופין, תקלוט את המספר בתור מחרוזת או בתור לולאה שקוראת תו אחר תו.

(או שתוותר וזהו, תלוי מה הדרישות המדוייקות של התרגיל...)

פורסם
  • מחבר



#include<stdio.h>
int main()
{
long long int num_b,num_h=0,j=1,sherit;
printf("please enter binary number <consist of 1 or 0>: ");
scanf("%lld",&num_b);
while(num_b!=0){
sherit=num_b%10;
num_h+=sherit*j;
j=j*2;
num_b/=10;
}
printf(" hexadecimal: %lX",num_h);

return 0;

}


תודה רבה עכשיו זה עובד מצויין.

שאלה נוספת:

אם אני רושם 1111111111111110

אני מקבל FFFE

אני רוצה לבצע רוורס כלומר להכניס עדיין אותם ספרות אבל לקבל את זה הפוך EFFF

פורסם

תעביר את המספר ההקסהדצימלי למחרוזת ואז תהפוך אותה.

פורסם
  • מחבר

לא הבנתי איך עושים את זה אתה יכול לרשום לי דוגמה?

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

זה לא נכון.

להפוך את הביטים ייתן ככה:

0xFE = 1111 1110

אבל

0x7F = 0111 1111

ולא 0xEF.

לא ברור אם התכוונת להדפיס את הניבלים מהסוף להתחלה או את הבתים. בכל אופן הפתרון כמעט זהה לגמרי.

כדי להדפיס לא הפוך אין צורך בלעשות כלום בעצם.

דוגמא:


#include <stdio.h>




void main()
{
long long num;
const int nof_bits = sizeof(long long) * 8;
scanf("%d", &num);
//not iverted
printf("0x%X\n", num);
//inverted
printf("0x");
long long mask = 0xf;
for (int nibble_ndx = 0; nibble_ndx < (nof_bits >> 2); ++nibble_ndx, mask = mask << 4)
{
printf("%X", num&mask);
}
printf("\n");
}

שים לב שאם אתה מדפיס הפוך אז בעצם יש לך הרבה אפסים שהם חשובים כי ה most significant nibble שלך הוא כביכול ה lsbs. אם הם משמאל אין להם חשיבות אבל מימין כן.

פורסם

אני אמרתי להפוך את הביטים?

קרא שוב...

פורסם
  • מחבר

אני עדיין ממש בהתחלה של הלמידה ועוד לא התקדמתי לחומר שאתה רשמת בקוד שלך.

אני רוצה לעשות שימוש בתנאים ולולאות בלבד כי להפוך את המספר כלומר:

להכניס 11111110111111

במצב הזה אני אמור לקבל FFEF

אך אני רוצה לקבל במקום FEFF/..

פורסם
  • מחבר

up?

פורסם

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

פורסם
  • מחבר

אני לא יכול להשתמש במחרוזת. צריך דרך אחרת.

ארכיון

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

דיונים חדשים