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

נושא: חישובים בעזרת פעולות על סיביות בבסיס 2...

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


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


היי כולם,

הנושא הוא : - חישובים בעזרת פעולות על סיביות בבסיס 2

אני מתקשה לממש את הפונקציה הבאה:
פונקציה המקבלת שני משתנים, X ו – n. הפונקציה תהפוך ב - X את n הסביות השמאליות ביותר ל- 1 ואת כל שאר הסביות תשאיר ללא שינוי.

לדוגמא:

F8( 4, 0x18A9B72C) = 0xF8A9B72C

ניתן להשתמש אך ורק באופרטורים -   <<   >>   +   |      &      ^   ~   !

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 05 April 2010 בשעה 15:32 | IP רשוּם
ציטוט ניר

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

נגדיר משתנה ביניים tmp שיכיל הזזה של X ב-(K-n) ביטים, ואחרי זה פעולה חוזרת של הזזה לכיוון ההפוך. התוצאה שלך ש-tmp בעצם יכיל אפסים מימין, והשאר כמו ב-X

עכשיו אם אני אקח את X ואפחית ממנו את tmp אני אקבל מספר שמכיל אפסים משמאל (!!) והשאר כמו ב-X.

מתחילה לראות את הכיוון?

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
אחד שיודע
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 03 April 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 13
נשלח בתאריך: 05 April 2010 בשעה 15:39 | IP רשוּם
ציטוט אחד שיודע

שאלה לי אליך?
האם ידוע מספר הסיביות המייצגות את המספר (X)?

קוד:

Y = num length (bits)

X = X | (((1<<n) - 1) << (Y-n))

אם לא, נחשוב על משהו אחר

עריכה

טוב הקדימו אותי

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 05 April 2010 בשעה 15:43 | IP רשוּם
ציטוט ניר



__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
בטי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 05 April 2010 בשעה 16:15 | IP רשוּם
ציטוט בטי

כן 32 סיביות, הוגדר לנו בתרגיל שאפשר להניח שיש 32 סיביות
חזרה לתחילת העמוד הצג את כרטיס החבר של בטי חפש הודעות אחרות של בטי בקר בדף הבית של בטי
 
בטי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 05 April 2010 בשעה 16:30 | IP רשוּם
ציטוט בטי



תודה רבה, אתם מאוד עוזרים לי.

את הפונקציה הזאת אני צריכה לממש ב-C, לכן על ידי זה שרשמת 1 כל פעם הכוונה ל32 סיביות שכולן 1 או ל-31 סיביות שהן 0 והאחרונה 1? והאם זה נכון לרשום פשוט 1 בקוד?

ובאופן כללי אם אני רוצה להשתמש לצורך העניין כמו במקרה שלנו במספר שכולו 1, האם ההשמה הבאה היא תקינה ב-C:

int x=oxFFFFFFFF;

האם מתבצעת המרה אוטומטית לבסיס עשרוני?

תודה,
 בטי
חזרה לתחילת העמוד הצג את כרטיס החבר של בטי חפש הודעות אחרות של בטי בקר בדף הבית של בטי
 
אחד שיודע
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 03 April 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 13
נשלח בתאריך: 05 April 2010 בשעה 17:17 | IP רשוּם
ציטוט אחד שיודע

מספר הסיביות תלוי באיזה סוג משתנה את מכניסה את הערך
אם תכניסי למשתנהINT, המספר ייוצג על ידי 32 סיביות
יש משתנים של 16, 8 , 64 סיביות וכו'

1 => 00000001
הביט הכי פחות משמעותי הוא 1
כן זה נכון לרשום פשוט 1 בקוד

וההשמה שהצגת היא חוקית , בC... בהנחה שint בC הוא משתנה unsigned, ככה זכור לי
בזכרון הערכים נשמרים בבסיס בינארי, מן הסתם


רק חידוד קטן
הזכרון המוקצה לכל סוג משתנה יכול להשתנות ממערכת הפעלה אחת לאחרת
נכון לשפות שלא רצות על virtual machine

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 05 April 2010 בשעה 18:24 | IP רשוּם
ציטוט בטי

הי,

תודה, חשבתי על משהו שיכול לפתור את הבעיה הנובעת מהשונות במערכות הפעלה שונות.

הפונקציה נראית כך לבינתיים:

int F8( int x, unsigned int n)
{
    int num=0;
    x = x | (((~num)-(1<<n))  << (N-n));
}


אבל זה נותן לי הודעת שגיאה לא ברורה שאני לא יודעת מה עושים במקרה כזה, ניסיתי כבר לרשון את זה בכל הצורות האפשריות:


expected primary-expression before '=' token

מה הכוונה?? ואיך עלי לשנות את הפונקציה כדי שתעבוד כמו שצריך??


תודה,
בטי

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

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

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

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