Метод rotate_right
Метод rotate_right выполняет циклический
сдвиг битов значения типа i32 вправо.
В отличие от обычного сдвига, при котором
освободившиеся биты заполняются нулями,
циклический сдвиг переносит "выпавшие" справа
биты в начало числа. Параметром метод принимает
количество позиций n типа u32,
на которое нужно сдвинуть биты. Метод возвращает
новое значение типа i32, не изменяя исходное.
Синтаксис
i32::rotate_right(self, n: u32) -> i32
Пример
Давайте выполним циклический сдвиг числа 1
вправо на одну позицию:
fn main()
{
let res = 1i32.rotate_right(1);
println!("{}", res);
}
Результат выполнения кода:
-2147483648
Младший бит числа 1 переместился в старший
разряд, что для знакового типа i32 даёт
отрицательное значение.
Пример
Давайте выполним циклический сдвиг числа 8
вправо на две позиции:
fn main()
{
let res = 8i32.rotate_right(2);
println!("{}", res);
}
Результат выполнения кода:
2
Число 8 в двоичном виде - это 1000.
После сдвига вправо на две позиции получаем
0010, что равно 2.
Пример
Давайте выполним циклический сдвиг числа 0b1010
вправо на одну позицию:
fn main()
{
let res = 0b1010i32.rotate_right(1);
println!("{}", res);
}
Результат выполнения кода:
5
Число 1010 после циклического сдвига вправо
превращается в 0101, что равно 5.
Пример
Если количество позиций кратно 32 (числу бит
в i32), значение не меняется:
fn main()
{
let res = 12345i32.rotate_right(32);
println!("{}", res);
}
Результат выполнения кода:
12345
Смотрите также
-
метод
rotate_left,
который выполняет циклический сдвиг битов влево -
метод
swap_bytes,
который меняет порядок байтов числа -
метод
leading_zeros,
который возвращает количество ведущих нулей -
метод
trailing_zeros,
который возвращает количество завершающих нулей