1 个不稳定版本
0.1.0 | 2023年10月13日 |
---|
#829 在 数学
3,986 每月下载量
19KB
267 行
saturating_cast
用于整数原语之间的饱和转换的库。
功能
no_std
默认启用- 以下所有类型之间实现饱和转换:
u8
,u16
,u32
,u64
,u128
,usize
i8
,i16
,i32
,i64
,i128
,isize
- 可以为用户类型实现饱和特质
描述
饱和转换是一种将一个类型转换为另一个类型的组合 clamp
和转换,概念上等同于 value.clamp(T::MIN, T::MAX) as T
.
示例
在下面的代码中,i32
值被限制在 255
,因为 u8
的范围是 0..=255
,并且 1024
大于 u8
可以表示的最大值。
在第二个片段中,一个有符号的 i8
在转换为 u16
时被饱和到 0
,因为无符号整数不能为负。
use saturating_cast::SaturatingCast;
let x: i32 = 1024;
let y: u8 = 10;
let z = x.saturating_cast::<u8>() - y;
assert_eq!(245, z);
let a = -128_i8;
let b: u16 = a.saturating_cast();
assert_eq!(0, b);
如果源类型值超出目标类型的范围,饱和 不会 保留原始值:结果值将是目标类型的最小值或最大值。
此crate仅用于转换并返回原始整数。在release
模式下避免回绕以及debug
模式下的崩溃(或者在release
模式下开启溢出检查)仍需要饱和算术。
许可证
此crate的许可证为以下之一
任选其一。
除非您明确声明,否则您提交的任何旨在包含在作品中的贡献,如Apache-2.0许可证所定义,均应按上述方式双许可,不附加任何额外条款或条件。