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

无 std saturating_cast

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

1 个不稳定版本

0.1.0 2023年10月13日

#829数学

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

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

无运行时依赖