#cast #clamp #conversion #clip #saturating #min-max

无 std saturating_cast

用于整数原语之间的饱和转换的库

1 个不稳定版本

0.1.0 2023年10月13日

#829数学

Download history 636/week @ 2024-03-15 606/week @ 2024-03-22 827/week @ 2024-03-29 703/week @ 2024-04-05 487/week @ 2024-04-12 759/week @ 2024-04-19 808/week @ 2024-04-26 1020/week @ 2024-05-03 944/week @ 2024-05-10 790/week @ 2024-05-17 508/week @ 2024-05-24 1124/week @ 2024-05-31 978/week @ 2024-06-07 1126/week @ 2024-06-14 950/week @ 2024-06-21 679/week @ 2024-06-28

3,986 每月下载量

MIT/Apache

19KB
267

saturating_cast

Build Status Crates.io Docs.rs

用于整数原语之间的饱和转换的库。

功能

  • 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许可证所定义,均应按上述方式双许可,不附加任何额外条款或条件。

无运行时依赖