עבור לתוכן

עזרה בפענוח תפקידו של מקרו מסוים

Featured Replies

פורסם

שלום,

יש לי מקרו שנכתב כחלק מקוד בC שמדמה סימולציה מסוימת, שאינני מצליח להבין מה בתכלס המקרו הזה בודק.

הנה:

BN(data,n) (((data)&(1<<(n)))>>(n))

מתרגום חופשי הבנתי שהוא מקבל שני שלמים מבצע AND בין data ל2^n את התוצאה מחלק ב2^n,

הרצתי את המקרו בכמה לולאות אבל לא הצלחתי למצוא בפלט שום קשר לוגי...

אשמח לקבל עזרה מה המשמעות של המקרו הזה, מה לדעתכם המקרו הזה בודק?

תודה.

פורסם

שניצל,

אתה יכול להסביר איך הגעת לזה? (בשביל ללמוד)

פורסם

הפעולה הזו:

1<<n

היא "הזזה" של הביט למקום ה-n, כלומר היא מחזירה מספר שהביט במקום ה-n שלו דלוק הוא 1, וכל השאר הם 0.

כשעושים לזה & עם data, מקבלים מספר שכל הביטים שלו הם 0, פרט לביט במקום ה-n, שהוא הביט ה-n של data.

לבסוף, "מזיזים" חזרה את הביט במקום ה-n חזרה למקום ה-0 באמצעות <<.

אגב, פתרון קצת יותר "יעיל" היה זה:

BN(data,n) (((data)>>(n) & 1)

פורסם

תודה רבה שניצל :xyxthumbs:

ארכיון

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

דיונים חדשים