Rust学习-处理整形溢出
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