Метод wrapping_mul
Метод wrapping_mul выполняет умножение
двух чисел типа i32. В отличие от
обычного умножения, при переполнении
(выходе за границы диапазона) метод не
вызывает панику, а выполняет циклический
сдвиг (wrapping), возвращая значение,
которое получается в результате отбрасывания
старших битов. Параметром метод принимает
второе число для умножения.
Синтаксис
i32::wrapping_mul(self, rhs: i32) -> i32
Пример
Давайте умножим число 10 на 20
без переполнения:
fn main()
{
let a: i32 = 10;
let b: i32 = 20;
let res = a.wrapping_mul(b);
println!("{}", res);
}
Результат выполнения кода:
200
Пример
Давайте рассмотрим случай переполнения.
Умножим максимальное значение i32::MAX
на 2. Обычное умножение вызвало бы
панику, но wrapping_mul вернёт
циклический результат:
fn main()
{
let a: i32 = i32::MAX;
let b: i32 = 2;
let res = a.wrapping_mul(b);
println!("{}", res);
}
Результат выполнения кода:
-2
Пример
Давайте умножим отрицательное число
-5 на 3:
fn main()
{
let a: i32 = -5;
let b: i32 = 3;
let res = a.wrapping_mul(b);
println!("{}", res);
}
Результат выполнения кода:
-15
Смотрите также
-
метод
wrapping_add,
который выполняет сложение с циклическим переполнением -
метод
wrapping_sub,
который выполняет вычитание с циклическим переполнением -
метод
saturating_mul,
который выполняет умножение с насыщением -
метод
checked_mul,
который возвращает None при переполнении