Rotacja bitów liczby II
Lekcja 13 z 17 w kursie Operacje bitowe w Coddy.
Świetnie! Rozumiesz już, co oznacza rotacja. W tym przypadku można jednak spojrzeć na rotację także przez pryzmat operacji przesunięcia. Możemy też powiedzieć, że rotowanie liczby binarnej przypomina wykonywanie na niej operacji przesunięcia, ale zamiast odrzucać bity, umieszczamy je z powrotem w liczbie. Zrozummy to na przykładzie-
Załóżmy, że mamy (33)10 w komputerze 8-bitowym. Jeśli obrócimy tę liczbę w lewo 3 razy, będzie ona przechowywana jako (00100001)2, .
- Najpierw przesunęliśmy (33)10 w lewo 3 razy.
- Aby zachować wysunięte bity, przesunęliśmy ją w prawo 8-3 razy. (8 to liczba bitów, których komputer używa do umieszczenia liczby w pamięci)
- Następnie wykonaliśmy operację OR na x i y, aby uzyskać obróconą liczbę.
| x = 33<<3 | 00001000 |
| y = 33>>5 | 00000001 |
x | y | 00001001 |
Podobnie możemy wykonać rotację w prawo-
- Najpierw przesuniemy (33)10 w prawo 3 razy i zapiszemy tę wartość w zmiennej.
- Następnie przesuniemy ją w lewo o (8-3) pozycji i zapiszemy tę wartość w innej zmiennej.
- Potem, wykonując operację OR, otrzymamy obróconą liczbę.
| x = 33 >> 3 | 00000100 |
| y = 33 << 5 | 00100000 |
x | y | 00100100 |
I to wszystko! Dzięki manipulacjom bitowym możemy tak łatwo obracać bity liczby binarnej.
Wyzwanie
ŚredniUzupełnij funkcję SumLeftRightRotation(), aby zwracała sumę wartości lewego i prawego obrotu podanej liczby.
Na przykład dla liczby 20 po lewym obrocie otrzymujemy 40, a po prawym obrocie otrzymujemy 10, więc wynikiem będzie 50, czyli suma lewego i prawego obrotu.
Tutaj num oznacza liczbę, a r oznacza liczbę obrotów.
Spróbuj swoich sił
#define INT_BITS 32
using namespace std;
int SumLeftRightRotation(int num, int r) {
// Napisz kod tutaj
}Wszystkie lekcje w sekcji Operacje bitowe
2Algorytmy bitowe
Potęga liczby 2Liczba występująca nieparzystą liczbę razyLiczba ustawionych bitówRotacja bitów liczby IRotacja bitów liczby IIPoćwicz samodzielnie: Kompilator C++ online