【unitrix】 6.16 非负整数类型( TUnsigned )特质(t_unsingned.rs)

发布于:2025-07-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、源码

use crate::number::{Null, O, I, B, Bit, TInt, NonZeroNonMinusOne};

// ==========TPositive 实现 ==========

/// 无符号整数的标记特质
pub trait TPositive: NonZeroNonMinusOne {}

impl TPositive for B<B<Null, O>, I> {}  // 1
impl<H: TPositive, L: Bit> TPositive for B<H, L> {}

// ========== TUnsigned 实现 ==========

/// 无符号整数的标记特质
pub trait TUnsigned: TInt {}

impl TUnsigned for B<Null, O> {}  // 0
impl<X: TPositive> TUnsigned for X {} // 为避免引入不规范结构,单独定义TPositive特质

二、

这段代码继续扩展了基于类型系统的数字表示,定义了无符号整数(正数和零)的特质。我来详细解释每一部分:

  1. 导入部分
    rust

use crate::number::{Null, O, I, B, Bit, TInt, NonZeroNonMinusOne};

这里导入了更多的类型和特质,包括之前定义的 NonZeroNonMinusOne。
2. TPositive 特质(正数)
rust

pub trait TPositive: NonZeroNonMinusOne {}

定义了一个表示正整数的特质 TPositive,它继承自 NonZeroNonMinusOne(非零非负一)。
实现部分:
rust

impl TPositive for B<B<Null, O>, I> {} // 1

表示数字 1(二进制表示为 B<B<Null, O>, I>)是一个正数。
rust

impl<H: TPositive, L: Bit> TPositive for B<H, L> {}

这是一个泛型实现,表示:

如果 H 是一个正数(TPositive)

且 L 是一个位(Bit)
那么 B<H, L>(即在正数 H 后追加一个位 L)也是一个正数。
  1. TUnsigned 特质(无符号整数)
    rust

pub trait TUnsigned: TInt {}

定义了一个表示无符号整数(即非负整数,包括零和正数)的特质 TUnsigned,它继承自 TInt。
实现部分:
rust

impl TUnsigned for B<Null, O> {} // 0

表示数字 0(二进制表示为 B<Null, O>)是一个无符号整数。
rust

impl<X: TPositive> TUnsigned for X {}

表示任何正数(TPositive)也都是无符号整数(TUnsigned)。注释说明这是为了避免引入不规范的结构而单独定义了 TPositive 特质。
4. 类型关系总结

TUnsigned(无符号整数)包含:

    零 (B<Null, O>)

    所有 TPositive(正数)

TPositive(正数)是 NonZeroNonMinusOne(非零非负一)的特例
  1. 设计目的

这种设计实现了:

类型安全的无符号整数表示

通过类型系统在编译期区分有符号数和无符号数

确保数值的合法性(如排除不规范格式)

支持类型级编程,可以在编译期进行数值计算和验证

这种模式常见于需要强类型保证的领域,如密码学、安全关键系统或形式验证等场景。


网站公告

今日签到

点亮在社区的每一天
去签到