מדריך C# – אופרטורים בינאריים

‏ • Sela

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

אופרטורים בינאריים שעובדים על מספרים

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

האופרטור '&' מופעל על שני מספרים ומבצע את פעולתו על ביט בנפרד (נקרא bitwise AND).
נראה דוגמא מפורטת לכך, נראה לחשב מה התוצאה של 5 & 7:

ראשית נסתכל על הייצוג הבינארי של המספר 5: 00000101
כעת נסתכל על הייצוג הבינארי של המספר 6: 00000110

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

כעת נבצע את אופרטור '&' על כל סיבית בנפרד ונקבל את המספר 4: 00000100

//   00000101 = 5
// & 00000110 = 6
//   ========
//   00000100 = 4

byte x = 5 & 6;
// x = 4

להלן טבלת האמת שמתאימה לאופרטור '&' עבור כל זוג ביטים:

&

0

1

0

0

0

1

0

1

באופן דומה פועל האופרטור '|' (נקרא bitwise OR) על כל זוג סיביות.

להלן טבלת האמת שמתאימה לאופרטור '|':

|

0

1

0

0

1

1

1

1

להלן טבלת האמת עבור אופרטור '^' (נקרא גם bitwise XOR):

^

0

1

0

0

1

1

1

0

האופרטור '~' עובד על מספר שלם בודד והופך כל סיבית במספר.

להלן טבלת האמת עבור האופרטור '~':

~

0

1

1

0


אופרטורי הזזה

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

האופרטור '>>' מבצע הזזה שמאלה של המשתנה המופיע מימין לאופרטור, המשתנה המופיע משמאל לאופרטור מייצג את מספר הצעדים שיש לעשות.

לדוגמא, ההצגה הבינארית של המספר 5 היא 00000101. אם נזיז את ההצגה הזו פעמיים שמאלה נקבל 00010100 שהוא הייצוג הבינארי של המספר 20.

פעולה זו מתבצעת בקוד ע"י:

int a = 5;         // 00000101 = 5
int b = a << 2;   
// 00010100 = 20

באופו דומה, האופרטור '<<' מבצע הזזה ימינה של המשתנה המופיע מימין לאופרטור, המשתנה המופיע משמאל לאופרטור מייצג את מספר הצעדים שיש לעשות.

לדוגמא, הקוד הבא מבצע הזזה ימינה של המספר 20 וע"י כך נקבל את המספר 5:

int a = 20;        // 00010100 = 20
int b = a >> 2;   
// 00000101 = 5


אופרטורי הצבה בינאריים

באופן דומה לאופרטורי הצבה אריתמטיים, קיימים אופרטור הצבה בינאריים שמשמשים לכתיבה מקוצרת של האופרטורים הבינאריים הרגילים.

האופרטור '=&' מבצע '&' ומציב את התוצאה באותה פעולה.

לדוגמא, בקוד הבא השורה השניה המשתמשת באופרטור '=&' והשורה השלישית מבצעות בדיוק אותה פעולה:

int a = 5;
a &= 6;
a = a & 6;

קיימים אופרטורים נוספים: '=<<' , '=>>' , '=^' , '=|'.

האופרטור '=|' מבצע '|' והצבה באותה פעולה, וכנ"ל לגבי שאר האופרטורים מסוג זה.

תגיות: , , ,

arikp

אריק פוזננסקי הוא יועץ בכיר ומרצה בסלע. הוא השלים שני תארי B.Sc. במתמטיקה ומדעי המחשב בהצטיינות יתרה בטכניון. לאריק ידע נרחב בטכנולוגיות מיקרוסופט, כולל .NET עם C#, WPF, Silverlight, WinForms, Interop, COM/ATL, C++ Win32 ו reverse engineering.

תגובות בפייסבוק