如何在Rust中返回整数溢出标志?
Swift具有整数溢出算术函数,该函数返回一个标志,指示数字是否溢出。Rust中有相同的东西吗?Rust有整数算术本质,例如如何在Rust中返回整数溢出标志?,rust,integer-overflow,Rust,Integer Overflow,Swift具有整数溢出算术函数,该函数返回一个标志,指示数字是否溢出。Rust中有相同的东西吗?Rust有整数算术本质,例如 pub不安全外部“内部生锈”fn添加带有溢出的\u( x:T, y:T )->(T,bool) 正如您所注意到的,这是有原因的,但这些都是不安全的,而且使用起来有点烦人 在Rust 1.0之前,标准库提供了包装器,以、和的形式检测4个算术运算的溢出 从Rust 1.0开始,这些特性不再存在,每个数字类型上都有固有的方法,例如 但是,它们只检测溢出,不返回溢出结果: fn
pub不安全外部“内部生锈”fn添加带有溢出的\u(
x:T,
y:T
)->(T,bool)
正如您所注意到的,这是有原因的,但这些都是不安全的,而且使用起来有点烦人
在Rust 1.0之前,标准库提供了包装器,以、和的形式检测4个算术运算的溢出
从Rust 1.0开始,这些特性不再存在,每个数字类型上都有固有的方法,例如
但是,它们只检测溢出,不返回溢出结果:
fn main() {
println!("{:?}", 5u16.checked_add(65530u16));
println!("{:?}", 6u16.checked_add(65530u16));
}
()
印刷品:
Some(65535)
没有一个
自Rust 1.7.0以来,在整数类型上定义了溢出(rhs)
例如:
计算self
+rhs
返回加法的元组以及指示
是否会发生算术溢出。如果发生溢流
发生,然后返回包装的值
例如:
use std::i64;
assert_eq!(5i64.overflowing_add(2), (7, false));
assert_eq!(i64::MAX.overflowing_add(1), (i64::MIN, true));
()您知道为什么它不安全吗?@delnan,默认情况下,所有编译器内部函数都是不安全的(它们是一个实现细节,只是通过FFI通过自定义ABI导入,所有FFI函数都被标记为
不安全
,有一些想法可以使这个可控/安全的内部函数不-不安全
,但这是低优先级的)。
use std::i64;
assert_eq!(5i64.overflowing_add(2), (7, false));
assert_eq!(i64::MAX.overflowing_add(1), (i64::MIN, true));