Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rust中返回整数溢出标志?_Rust_Integer Overflow - Fatal编程技术网

如何在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

Swift具有整数溢出算术函数,该函数返回一个标志,指示数字是否溢出。Rust中有相同的东西吗?

Rust有整数算术本质,例如

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));