# Rust 显示处理整形溢出
# 1、使用 wrapping_xxx 方法进行处理
使用 wrapping_xxx 方法处理后,超过上边界的值会从下边界开始,然后以此类推;超过下边界的值会从上边界开始,然后以此类推
//i8 的范围在 [-128, 127] | |
// 127 + 1 = 128 超过了取值上界(上溢出),即 128 变为 - 128 | |
let n: i8 = 127i8.wrapping_add(1); | |
println!("n: {}", n); //n is -128 | |
//-128 - 1 = -129 超过了取值下界(下溢出),即 - 129 变为 127 | |
let n: i8 = (-128i8).wrapping_sub(1); | |
println!("n: {}", n); //n is 127 |
# 2、使用 checked_xxx 方法进行处理
如果溢出则返回 None
let n: i8 = 120i8.checked_add(121); | |
match n { | |
Some(val) => { | |
println!("n: {}", n); | |
}, | |
None => { | |
println!("n is None"); | |
} | |
} |
# 3、使用 overflowing_xxx 方法进行处理
返回一个元组(包括一个包装值和一个布尔值),表示是否出现溢出
let n: i8 = 127i8.overflowing_add(1); | |
println!("number: {}, bool flag: {}", n.0, n.1); // number is -128, bool flag is true |
# 4、使用 saturating_xxx 方法进行处理
对超过范围的值进行饱和处理,超过最大值则返回最大值;超过最小值则返回最小值
let n: i8 = 127i8.saturating_add(1); | |
println!("n: {}", n); // n is 127 | |
let n: i8 = (-128)i8.saturating_sub(1); | |
println!("n: {}", n); // n is -128 |