# 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
更新于 阅读次数