Menu
Coddy logo textTech

אופרטורי הזזה ימינה ושמאלה

שיעור 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
challenge icon

אתגר

קל

הכפל את המספר הנתון (הקלט) באמצעות אופרטורי הזזה.

נסו בעצמכם

#include <iostream>
#include <vector>
using namespace std;

int Double(int num) {
    // כתבו כאן קוד
}

כל השיעורים ביחידה מניפולציה על ביטים

תרגלו בעצמכם: קומפיילר C++ אונליין