חידה בשפת C

clocker

New member
חידה בשפת C

מה עושה הפקודה הבאה ?
#define P(x) !( (x) & ((x) - 1) )​
(הכוונה היא כמובן מה עושה המקרו P)
 

עריסטו

Active member
הערה

ליתר דיוק - המקרו מחזיר true אם"ם x הוא אפס או חזקה של 2.
 

בסג

New member
כן

האופרטור & עושה פעולת AND בין כל זוג סיביות תואמות (בהצגה הבינארית של המספר). למשל: 1010 & 1100 = 1000 אחרי שזה ברור, צריך לדעת מתי פעולת & שכזו על X ועל X-1 גורמת להתאפסות, ומתי לא. היא תגרום להתאפסות רק אם היא תדאג להחליף את כל האחדות שבX באפסים (אם ישנן אחדות). ומכאן לתשובתו של עריסטו, הדרך קצרה.
 
למעלה