אופרטורי הזזה ימינה ושמאלה
שיעור 7 מתוך 17 בקורס מניפולציה על ביטים של Coddy.
אופרטורי הזזה משמשים להזזת סיביות שמאלה או ימינה.
אופרטור הזזה ימינה ( >> )
הוא מקבל שני אופרנדים. הערך הראשון הוא המספר שאת הסיביות שלו רוצים להזיז ימינה, והאופרנד השני מציין בכמה מיקומים רוצים להזיז אותן. למעשה, אנו דוחפים אפסים מצד ה-MSB של המספר אל המספר הבינארי.
הזזה ימינה מסומנת כך: '>>' .
הזזה ימינה שקולה לחלוקת המספר בחזקה של שתיים. בואו נבין זאת באמצעות המחשה.

לקחנו את (11)10 והזזנו אותו ימינה 3 פעמים, וקיבלנו (1)10 כפלט. אפשר גם לחשב זאת באמצעות עיגול כלפי מטה של (11 / 23), ששווה ל-(1)10.
שימוש:
int a = 11;
a>>3;
OUTPUT: 1כאן a הוא המספר שאת הסיביות שלו יש להזיז, ו-3 הוא מספר המיקומים ימינה שאליהם יש להזיז אותן.
אופרטור הזזה שמאלה ( << )
גם הוא מקבל שני אופרנדים. האופרנד הראשון הוא המספר שאת הסיביות שלו רוצים להזיז שמאלה, והאופרנד השני מציין בכמה מיקומים רוצים להזיז אותן. למעשה, אנו דוחפים אפסים מצד ה-LSB של המספר. הזזה שמאלה מסומנת כך: '<<' . הזזה שמאלה שקולה להכפלת המספר בחזקה של שתיים. בואו נבין זאת באמצעות אותה דוגמה.

לקחנו את (11)10 והזזנו אותו ימינה 3 פעמים, וקיבלנו (88)10 כפלט. אפשר גם לחשב זאת על ידי הכפלת (11)10 ב-23, ששווה ל-(88)10. שימו לב שבמקרה הזה אי אפשר להסיר את ה-MSB: הזזה שמאלה תגדיל את מספר הסיביות ותדחוף אפסים מצד ה-LSB, אך לא תסיר את סיביות ה-MSB. לעומת זאת, בהזזה ימינה אנו דוחפים אפסים מצד ה-MSB, והסיביות שמשמאל פשוט מושמטות.
שימוש:
int a = 11;
a<<3;
OUTPUT: 88אתגר
קלהכפל את המספר הנתון (הקלט) באמצעות אופרטורי הזזה.
נסו בעצמכם
#include <iostream>
#include <vector>
using namespace std;
int Double(int num) {
// כתבו כאן קוד
}כל השיעורים ביחידה מניפולציה על ביטים
1מבוא ויסודות
מהי מניפולציה של ביטים?למה צריך מניפולציה של ביטים?מספרים בינאריים ועשרונייםאופרטורי NOT ו-ORאופרטור ANDאופרטור XORאופרטורי הזזה ימינה ושמאלהסיכום האופרטורים על ביטיםתרגלו בעצמכם: קומפיילר C++ אונליין