Метод saturating_sub
Метод saturating_sub выполняет вычитание одного числа из другого
с насыщением. Если в результате вычитания должно произойти
переполнение в сторону отрицательных значений, метод вернёт
минимально возможное значение для типа i32, то есть
i32::MIN. Параметром метод принимает число, которое
нужно вычесть из текущего значения.
В отличие от обычного оператора -, который в режиме отладки
вызывает панику при переполнении, метод saturating_sub
гарантированно возвращает корректный результат, ограничивая его
границами допустимого диапазона.
Синтаксис
i32::saturating_sub(self, rhs)
Пример
Давайте вычтем число 5 из числа 10. Оба значения
находятся в допустимом диапазоне, поэтому результат будет обычным:
fn main()
{
let a: i32 = 10;
let b: i32 = 5;
let res = a.saturating_sub(b);
println!("{}", res);
}
Результат выполнения кода:
5
Пример
Давайте вычтем число 1 из минимального значения типа
i32. В обычной ситуации это привело бы к переполнению,
но метод saturating_sub вернёт минимальное значение:
fn main()
{
let a: i32 = i32::MIN;
let b: i32 = 1;
let res = a.saturating_sub(b);
println!("{}", res);
}
Результат выполнения кода:
-2147483648
Пример
Давайте вычтем число 100 из числа 50 с помощью
метода saturating_sub и сравним с обычным вычитанием:
fn main()
{
let a: i32 = 50;
let b: i32 = 100;
let res = a.saturating_sub(b);
println!("{}", res);
}
Результат выполнения кода:
-50
Здесь переполнения не произошло, так как результат -50
укладывается в диапазон типа i32.
Смотрите также
-
метод
saturating_add,
который выполняет сложение с насыщением -
метод
saturating_mul,
который выполняет умножение с насыщением -
метод
wrapping_sub,
который выполняет вычитание с циклическим переносом -
метод
checked_sub,
который выполняет вычитание с проверкой переполнения