Метод overflowing_sub
Метод overflowing_sub выполняет вычитание
одного числа из другого и возвращает кортеж
из двух значений: результата вычитания и
логического флага, указывающего, произошло
ли переполнение. Параметром метод принимает
число, которое нужно вычесть из текущего
значения. Если переполнения не произошло,
флаг равен false, а результат
соответствует обычному вычитанию. Если же
переполнение произошло, флаг равен
true, а результат представляет собой
значение, полученное с учётом переполнения
(по модулю 2³²).
Синтаксис
i32.overflowing_sub(other)
Пример
Давайте вычтем число 5 из числа
10 и посмотрим на результат:
fn main()
{
let res = 10i32.overflowing_sub(5);
println!("{:?}", res);
}
Результат выполнения кода:
(5, false)
Пример
Давайте вычтем число 1 из минимального
значения i32 и посмотрим, как
проявится переполнение:
fn main()
{
let res = i32::MIN.overflowing_sub(1);
println!("{:?}", res);
}
Результат выполнения кода:
(2147483647, true)
Как видно из примера, при переполнении флаг
равен true, а результат стал
максимальным положительным числом
i32.
Пример
Давайте используем флаг переполнения для обработки ситуации и выведем разные сообщения:
fn main()
{
let (res, overflow) = i32::MIN.overflowing_sub(10);
if overflow
{
println!("Overflow! Result: {}", res);
}
else
{
println!("No overflow. Result: {}", res);
}
}
Результат выполнения кода:
Overflow! Result: 2147483637
Смотрите также
-
метод
overflowing_add,
который выполняет сложение с обнаружением переполнения -
метод
wrapping_sub,
который выполняет вычитание с циклическим переполнением -
метод
saturating_sub,
который выполняет вычитание с насыщением -
метод
checked_sub,
который возвращает результат вычитания илиNoneпри переполнении