אופרטור AND
שיעור 5 מתוך 17 בקורס מניפולציה על ביטים של Coddy.
האופרטור AND ( &)
AND ביטי הוא אופרטור בינארי הפועל על שתי תבניות ביטים באורך שווה. אם שני הביטים במיקום המושווה בתבניות הביטים הם 1, הביט בתבנית הביטים המתקבלת הוא 1, אחרת הוא 0. הסמל '&' מייצג את האופרטור AND.
הטבלה שלהלן מציגה פעולת AND על שני ביטים.
| x | 0 | 0 | 1 | 1 |
| y | 0 | 1 | 0 | 1 |
| x & y | 0 | 0 | 0 | 1 |
ניקח דוגמה ונבין טוב יותר את פעולת AND.

בדוגמה שלמעלה ביצענו פעולת AND על (11)10 ו-(6)10 והתוצאה שהתקבלה היא (2)10. פשוט כתבנו את המספרים האלה בצורה הבינארית שלהם והשווינו בין שני הביטים; אם הופיע אפס כלשהו, פשוט כללנו 0 בתבנית הביטים המתקבלת.
שימוש:
int a = 1;
int b = 0;
>> a & b
OUTPUT: 0אתגר
קלטים מגלה כמה אבנים במערה במהלך טיול, ועליהן כתובים מספרים. כל האבנים מסודרות ברצף. ליד האבנים האלה הוא מגלה יומן מסתורי, שבו כתוב שהאבנים האלה קסומות ומצוינים תנאים מסוימים שעליהן לקיים כדי לחולל קסמים. התנאים הם:
- אבני הקסם מופיעות בקבוצות של 2.
- יש לבחור את האבנים ברצף, והקבוצה לא יכולה לכלול אבן שנבחרה קודם לכן.
- התנאי השלישי לא היה קריא. לכן טים עורך ניסויים באבנים ומגלה שהן מחוללות קסמים רק כאשר פעולת AND המבוצעת על המספרים המופיעים בקבוצה נותנת אפס.
מצאו את הקבוצה שחוללה קסם והציגו את המספר הכתוב על האבן הראשונה בקבוצה.
לדוגמה, נניח שהאבנים שמצא היו מסודרות כך:
[ 5 , 2 , 3 , 6 , 1 , 9 ]תחילה טים מחלק את האבנים לקבוצות רציפות של 2, ללא חפיפה. { (5,2) , (3,6) , (1,9) }
לאחר מכן הוא מבצע פעולת AND ( & ) על הקבוצות האלה ומגלה שזו הקבוצה הראשונה שתחולל קסם. 5=> (101)2 ו-2=>(010)2. רק הקבוצה הזו מבין שלוש הקבוצות תיתן אפס כאשר מבצעים עליהן פעולת AND.
התוצאה שנקבל היא 5, מכיוון שעלינו להשתמש במספר שעל האבן הראשונה בקבוצה כדי לזהות אותה.
שימו לב גם שכל הרצפים מכילים מספר זוגי של איברים, ובכל אחד מהרצפים הנתונים קיימת תמיד קבוצה אחת ויחידה שתחולל קסם. האתגר שלכם הוא להשלים את הפונקציה "MagicStones" כדי למצוא את קבוצת הקסם שטים גילה.
נסו בעצמכם
#include <iostream>
#include <vector>
using namespace std;
int MagicStones(vector<int> stone_sequence) {
// כתבו כאן את הקוד
}כל השיעורים ביחידה מניפולציה על ביטים
תרגלו בעצמכם: קומפיילר C++ אונליין