עבור לתוכן

שאלה ב C...

Featured Replies

פורסם

שלום...

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

אני מקבל ממנה CHAR אני צריך להדפיס את הערך הבינארי שלו..

ובנוסף אני צריך לשחק עם הביטים למשל להזיז את הביט הראשון למקום 3 וכו'...

איך עושים זאת?

פורסם

כדי להזיז את הביטים אתה עושה SHIFT.

אם אתה רוצה לבדוק אם הביט במקום ה- I דלוק או לא, אתה צריך להזיז I מקומות, לעשות & עם 1, ולבדוק אם שווה ל- 0 או שונה.

או לבדוק אם המספר שיצא לך הוא זוגי או איזוגי(ע"י %).

פורסם
  • מחבר

אתה יכול לכתוב לי את הקטע קוד לבדיקה אם דלוק או לא?

פורסם

כדי להזיז את הביטים אתה עושה SHIFT.

אם אתה רוצה לבדוק אם הביט במקום ה- I דלוק או לא, אתה צריך להזיז I מקומות, לעשות & עם 1, ולבדוק אם שווה ל- 0 או שונה.

או לבדוק אם המספר שיצא לך הוא זוגי או איזוגי(ע"י %).

מדוע צריך להזיז קודם?

AND עם ערך אשר המיקום ה-i שלו דלוק יתן את אותה תוצאה. אפס לא דלוק, כל דבר אחר דלוק.

פורסם

מכיוון שצריך לזכור את הערכים המתאימים....

וגם

אם פתאום יחליטו לשנות את הגודל של הCHAR אתה בבעיה.

פורסם
  • מחבר

איך כותבים את זה?

פורסם

>> מזיז שמאלה

<< מזיז ימינה

& וגם

| או

~ הופך את הביטים

^ XOR

! אם 0 נותן 1 אם שונה מ0 נותן 0

פורסם
  • מחבר

אבל איך כותבים את הבדיקה עצמה?

פורסם

int fun(char c, int i)
{
return ((1<<i)&c)!=0;
}

פורסם
  • מחבר

ובמילים אם אתה יכול להסביר לי מזה אומר...

פורסם

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

פורסם
  • מחבר


int fun(char c, int i)
{
return ((1<<i)&c)!=0;
}

תוכלו להסביר לי במילים איך זה מתבצע?

פורסם

זה אומר בדיוק מה שרשמו למעלה.

1<<i

מזיז את המספר 1 i ביטים שמאלה (שזה זהה ללכפול אותו ב-2 i פעמים).

כלומר, 1>>1 זה 2, 1>>2 זה 4, 1>>3 זה 8, וכן הלאה.

מה שאתה מקבל הוא מספר שבו הביט במקום ה-i דולק, וכל השאר כבויים.

אח"כ עושים למספר הזה AND לוגי עם c, כלומר עוברים על שני המספרים ביט ביט ומדליקים את הביטים שדלוקים בשניהם.

בתכלס, כיוון שבמספר רק הביט ה-i דולק, זה אומר שהמספר החדש בדיוק יכיל את הביט ה-i של המספר c.

ואז אנחנו בודקים אם הוא 0 או לא.

פורסם

ניתן לעשות גם את הדבר הבא:


int fun(char c, int i)
{
return (c>>i)%2;
}

אני לא יודע מה יותר יעיל...

פורסם
  • מחבר

יש לך מסנג'ר שאני יכול לפנות אלייך...

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

ארכיון

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

דיונים חדשים