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