תוכנית העברה מעשרוני לבינארי .. - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

תוכנית העברה מעשרוני לבינארי ..


mupi8

Recommended Posts

אני צריך לבנות תוכנית בשפת C שתקבל מספר עשרוני ותפרק אותו למספר בינארי בן 16 ספרות וצריך שהמספר יחולק לפי high byte ו- low byte כלומר 8 ביטים ראשונים זה הlow ו8 ביטים אחרונים זה high אין לי מושג איך עושים את זה למישהו יש פיתרון?....

קישור לתוכן
שתף באתרים אחרים

בצע חילוק ב-2 של המספר עד אשר הוא שווה ל-1

התוצאה כמובן באה מאיסוף החילוק במודול שלו.

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

קישור לתוכן
שתף באתרים אחרים

תודה אחי אבל יש מצב אתה עוזר לי יותר או אפילו נותן לי קוד?...

לדוגמא המספר 621 אז אני צריך להגיד שבLOW יש 109 וב HIGH יש 2 כי 2 שקול ל512 (אם אתה מבין אותי) 2 זה בHIGHBYTE הביט השני שהוא שקול ל512 אשמח לעזרה אחי אני חייב את זה דחוף להגיש מחר..

קישור לתוכן
שתף באתרים אחרים

אתה צריך להשתמש בפעולות AND (האופרטור &) והזזה.

כדי להוציא את ה-8 ביט הראשונים אתה צריך לעשות פעולת AND של המספר עם מספר ששמונת הביטים הימניים שלו הם 1 והשאר 0 (המספר FF בהצגה הקסדיצימלית או 255 בדצימלית). הפעולה הזו תאפס את שאר הביטים (הגבוהים) ותשאיר לך את הנמוכים:

num &= 0xFF

עכשיו בשביל לקבל את מה שאתה רוצה עבור השמונה השמאליים אתה את אותה פעולה אבל עם מספר ששמונת הביטים השמאליים שלו הם 1 והימניים 0:

num &= 0xFF00

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

קישור לתוכן
שתף באתרים אחרים

k-o-b-y

תודה רבה אחי

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

קישור לתוכן
שתף באתרים אחרים

בהמשך לרעיון שנתן לך KOBY הנה התוכנית:

#include <stdio.h>

void main()

{

int num;

scanf("%d", &num);

int high=num & 0xFF00;

int low =num & 0x00FF;

printf("HighBYte : %d",high);

printf("LowBYte : %d",low);

}

קישור לתוכן
שתף באתרים אחרים

בהמשך לרעיון שנתן לך KOBY הנה התוכנית:

#include <stdio.h>

void main()

{

int num;

scanf("%d", &num);

int high=num & 0xFF00;

int low =num & 0x00FF;

printf("HighBYte : %d",high);

printf("LowBYte : %d",low);

}

תודה רבה אחי :)

קישור לתוכן
שתף באתרים אחרים

הנה פתרון לבעיה דומה - הדפסת מספר 32 ביט בבינארי. אבל אני לא בטוח אם צריך להתיחס אם זה big או little endian . לא נראה לי שזה צריך לשנה משהו כי מספר hex הוא ערך ולא רפרזנטציה נראה לי שזה יותר משנה כשעושים type cast למשתנה אחד לאחר ולא לליטראלים.

int main()
{
int mask;
int num;
int first_one=0;

scanf("%d", &num);

printf(" %d in binary is : " );
for(mask=0x80000000;mask!=0; mask>>=1)
{
if(!(mask&num)&&firstone)
{
printf("0");
}
else
{
first_one=1;
printf("1");
}

}

printf("\n");
return 0;
}

לפחות לא עשיתי לך את כל שיעורי הבית. התוכנית לא את האפסים לפני האחד הראשון (most segnificant one ) שהמוצאת ולא בדקתי אותה בכלל . הרגע עברתי עליה ותיקנתי כמה באגים. אבל ככה מדפיסים מספר בינארי - תצתרך לעשות לה כמה שינויים כדי שהיא תעבוד בשבילך.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...