נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: איך אני מתרגמת ביטים

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
rosberry
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 14 August 2006
משתמש: מנותק/ת
הודעות: 12
נשלח בתאריך: 31 August 2006 בשעה 22:25 | IP רשוּם
ציטוט rosberry

שלום יש לי בעייה

אני צריכה לקבל כתובת שהיא מטיפוס  unsigned int

שבעצם הכתובת מיוצגת ע"י מערך בגודל 32 שמחולק בצורה הבאה

מקום 0-7 קוד

מקום 8-15 רחוב

מקום 16-19 עיר

במקום 20-23 יש 1111

במקום 24-29 מדינה

 30-31 יבשת

אני רוצה לפרק את הכתובת ולאחסן אותה במערך בגודל 6

שהמקום החמישי שלו ייצג יבשת מקום 4 מדינה וכו'

כתבתי את הקטע קוד הבא אבל משום מה זה מתרגם לי נכון רק את היבשת והמדינה מישהו יכול אולי להגיד לי איפה הטעות ??

int* Distance::translateTheAdress(unsigned int adress,int codeArray[6])
{
 codeArray[5] = adress>>30;//get the continent
 adress = adress<<4;//remove the continent
 codeArray[4]=adress>>28;//get the land
 adress = adress<<6;
 codeArray[3]=adress>>24;//the zero or 15
 adress = adress<<4;
 codeArray[2]=adress>>28;//get the city
 adress =adress<<4;
 codeArray[1]=adress>>24;//get the street
 adress =adress<<8;
 codeArray[0]=adress>>24;//get the house or facility
 return codeArray;
}

הקוד הוא 1123680259

הוא צריך להיות מתורגם ליבשת 1 מדינה 2  עיר 10 רחוב 0 קוד 3  ובמקום הקבוע אמור להיות 15

מישהו אולי יודע מה אני עושה לא בסדר???

חזרה לתחילת העמוד הצג את כרטיס החבר של rosberry חפש הודעות אחרות של rosberry
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 31 August 2006 בשעה 22:47 | IP רשוּם
ציטוט shoshan

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

אין מצב שדחיפה אחת של הביטים מחזירה לך את המספר הרצוי.

לדוגמא כדי לקבל את הביט הראשון את צריכה לדחוף 31 שמאלה ואז 31 ימינה.
כדי לקבל את הביט השני את צריכה לדחוף 30 שמאלה ו-31 ימינה.
כדי לקבל את הביטים השלישי והרביעי את צריכה לדחוף 28 שמאלה ו-30 ימינה.

*מקווה שלא הטעיתי אותך.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
rosberry
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 14 August 2006
משתמש: מנותק/ת
הודעות: 12
נשלח בתאריך: 31 August 2006 בשעה 23:31 | IP רשוּם
ציטוט rosberry

לא נראה לי שהבנתי אותך נכון

כדי להוציא את היבשת שנמצאת במקום 30ן31

אני  codeArray[5] = adress>>30;//get the continent
 adress = adress<<31;//remove the continent

עכשיו כדי להוציא את המדינה אני עושה שנמצאת במקום 24-29

 codeArray[4]=adress>>24;//get the land
 adress = adress<<29;

כי ניסיתי את זה וזה לא עובד נכון

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

חזרה לתחילת העמוד הצג את כרטיס החבר של rosberry חפש הודעות אחרות של rosberry
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 01 September 2006 בשעה 00:26 | IP רשוּם
ציטוט shoshan

בעקרון את יכולה תצייר לעצמך מערך של בוליאנים (עם 32 איברים). תדמייני שכשדוחפים איבר במערך למקום מתחת ל-0 או מעל 31 הוא נעלם.
וכשדוחפים לצד אחד, נוספים אפסים בצד שני.

לדוגמא אם היה לנו 11111111 ב-X
ועשינו
X = X >> 3
עכשיו X הוא 00011111
X = X << 2
עכשיו X הוא 011111100

ואז אם לדוגמא את רוצה את הסיביות ה-30 וה-31 (האחרונות) את צריכה לדחוף אותן להתחלה (כדי שיהיו ראשונות ואחריהם יהיו רק אפסים).
X << 30


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 September 2006 בשעה 08:31 | IP רשוּם
ציטוט אורח

shoshan כתב:
בעקרון את יכולה תצייר לעצמך מערך של בוליאנים (עם 32 איברים). תדמייני שכשדוחפים איבר במערך למקום מתחת ל-0 או מעל 31 הוא נעלם.
וכשדוחפים לצד אחד, נוספים אפסים בצד שני.

לדוגמא אם היה לנו 11111111 ב-X
ועשינו
X = X >> 3
עכשיו X הוא 00011111
X = X << 2
עכשיו X הוא 011111100

ואז אם לדוגמא את רוצה את הסיביות ה-30 וה-31 (האחרונות) את צריכה לדחוף אותן להתחלה (כדי שיהיו ראשונות ואחריהם יהיו רק אפסים).
X << 30

מאיפה לומדים את הדברים האלה?
למדתי C++ מספר מסודר ולא ראיתי דברים כאלה..
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 01 September 2006 בשעה 15:08 | IP רשוּם
ציטוט shoshan

http://cplus.about.com/od/advancedtutorials/l/aa042203h.htm

סתם לדוגמא.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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