【typenum】 23 倒序存储的无符号整数(private.rs片段)

一、源码

  1. 定义
    这段Rust代码实现了一个倒序存储的无符号整数系统。
rust 复制代码
/// Inverted `UInt` (has most significant digit on the outside)
pub struct InvertedUInt<IU: InvertedUnsigned, B: Bit> {
    msb: IU,
    lsb: B,
}
  1. 实现
rust 复制代码
/// Inverted unsigned numbers
pub trait InvertedUnsigned {
    fn to_u64() -> u64;
}

impl InvertedUnsigned for InvertedUTerm {
    #[inline]
    fn to_u64() -> u64 {
        0
    }
}

impl<IU: InvertedUnsigned, B: Bit> InvertedUnsigned for InvertedUInt<IU, B> {
    #[inline]
    fn to_u64() -> u64 {
        u64::from(B::to_u8()) | IU::to_u64() << 1
    }
}

二、核心概念

这是一个倒序存储的二进制数表示系统,与传统二进制表示相反:

  • 传统:1010 表示 10(最左边是最高位)

  • 倒序:1010 表示 5(最左边是最低位)

三、结构定义

rust 复制代码
pub struct InvertedUInt<IU: InvertedUnsigned, B: Bit> {
    msb: IU,  // 更高位的数字(在外部)
    lsb: B,   // 最低位数字
}

这个结构使用类型级编程,在编译时表示数字。

四、实现解析

  1. 终止类型(数字0)
rust 复制代码
impl InvertedUnsigned for InvertedUTerm {
    fn to_u64() -> u64 {
        0  // 基础情况:表示数字0
    }
}
  1. 递归类型(构建更大数字)
rust 复制代码
impl<IU: InvertedUnsigned, B: Bit> InvertedUnsigned for InvertedUInt<IU, B> {
    fn to_u64() -> u64 {
        u64::from(B::to_u8()) | IU::to_u64() << 1
    }
}

转换算法:

  • B::to_u8() - 获取当前位值(0或1)

  • IU::to_u64() << 1 - 递归处理更高位并左移1位

  • 用|操作符组合结果

五、示例说明

假设我们要表示倒序的二进制数 10(即传统二进制 01 = 1):

rust 复制代码
// 类型表示:InvertedUInt<InvertedUTerm, B1>
// 计算过程:
B::to_u8() = 1
IU::to_u64() = 0 (来自InvertedUTerm)
结果:1 | (0 << 1) = 1

再比如 101(传统二进制 101 = 5):

rust 复制代码
// 类型表示:InvertedUInt<InvertedUInt<InvertedUTerm, B0>, B1>
// 计算过程:
最外层:B=1, IU=内部结果
内部:B=0, IU=0 → 0 | (0 << 1) = 0
结果:1 | (0 << 1) = 1

六、设计特点

  • 编译时计算:所有转换在编译期完成

  • 类型安全:通过类型系统确保数值有效性

  • 递归结构:使用递归类型构建任意长度的数字

  • 倒序存储:与传统二进制表示方向相反

这种设计常用于需要编译时数值计算和类型安全的场景,如嵌入式系统或高性能计算库。

相关推荐
带娃的IT创业者4 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
Yeauty8 小时前
用 Whisper 转录前,你不用再离开 Rust
开发语言·rust·ffmpeg·音视频·视频
程序员爱钓鱼8 小时前
Rust HashMap 详解:键值存储、查询、更新与统计
后端·面试·rust
doiito21 小时前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
Zwarwolf1 天前
Rust零散知识点项目汇总
开发语言·rust
X档案库1 天前
【开源】我做了一套可以 AI 托管的 Markdown 博客与知识库
rust·博客·markdown·marksharex
程序员爱钓鱼1 天前
Rust Vec 动态数组详解:创建、增删、遍历与排序
前端·后端·rust
_abab1 天前
Rust重塑系统编程:从Linux内核到AI推理引擎的2026全景解析
linux·人工智能·rust
doiito2 天前
【Agent Harness】Gliding Horse 高级认知优化:让 Agent 的“大脑”和“免疫系统”真正协同
ai·rust·架构设计·系统设计·ai agent
longxiangam2 天前
第 4 篇:Embassy 异步运行时与事件驱动架构
单片机·嵌入式硬件·rust