当前位置: 首页 > news >正文

【unitrix数间混合计算】2.4 二进制整数标准化处理(src/number/normalize/int_normalize.rs)

一、源码

这段代码定义了二进制整数的标准化处理逻辑,使用Rust的trait系统在编译期完成数值规范化。

use crate::number::{Null, O, I, BinInt, Bit, IsBinInt};
// ============== 整数标准化 ==============
pub trait IntNormalize<L: Bit> {type Output: Default + IsBinInt;fn int_normalize(self, bit: L) -> Self::Output;
}// 基础情况:Null + X → BinInt<Null, X>
impl<X: Bit> IntNormalize<X> for Null {type Output = BinInt<Null, X>;fn int_normalize(self, _: X) -> Self::Output {Default::default()}
}// H = BinInt<Null,X> + L=X → 保持B<Null,X> (X 可以是 O 或 I)
impl<X: Bit> IntNormalize<X> for BinInt<Null, X>
whereBinInt<Null, X>: Default,
{type Output = Self;fn int_normalize(self, _: X) -> Self::Output {self}
}// H = BinInt<Null,I> + L=O → BinInt<BinInt<Null,I>,O>
impl IntNormalize<O> for BinInt<Null, I> {type Output = BinInt<Self, O>;fn int_normalize(self, _: O) -> Self::Output {Default::default()}
}// H = BinInt<Null,O> + L=I → BinInt<BinInt<Null,O>,I>
impl IntNormalize<I> for BinInt<Null, O> {type Output = BinInt<Self, I>;fn int_normalize(self, _: I) -> Self::Output {Default::default()}
}// 通用整数情况:保持原结构 (H已标准化)
impl<HH, HL: Bit, L: Bit, LL: Bit> IntNormalize<LL> for BinInt<BinInt<HH, HL>, L>
where Self: IsBinInt,
{type Output = BinInt<Self, LL>;fn int_normalize(self, rhs: LL) -> Self::Output {Default::default()}
}pub type IfB0<H> = <H as IntNormalize<O>>::Output;   // L=0时的标准化结果
pub type IfB1<H> = <H as IntNormalize<I>>::Output;   // L=1时的标准化结果

二、基本结构:


pub trait IntNormalize<L: Bit> {type Output: Default + IsBinInt;fn int_normalize(self, bit: L) -> Self::Output;
}
  • 定义IntNormalize trait,泛型参数L必须是Bit类型(O或I)

  • 关联类型Output必须实现Default和IsBinInt

  • int_normalize方法接收一个bit位,返回标准化后的整数

三、基础标准化规则:


impl<X: Bit> IntNormalize<X> for Null {type Output = BinInt<Null, X>;fn int_normalize(self, _: X) -> Self::Output {Default::default()}
}
  • 将Null + bit转换为BinInt<Null, bit>

  • 这是构建二进制整数的起点

四、整数保持规则:


impl<X: Bit> IntNormalize<X> for BinInt<Null, X> {type Output = Self;fn int_normalize(self, _: X) -> Self::Output { self }
}
  • 已标准化的整数(如BinInt<Null, I>)追加相同bit时保持原样

五、位扩展规则:


impl IntNormalize<O> for BinInt<Null, I> {type Output = BinInt<Self, O>;fn int_normalize(self, _: O) -> Self::Output { Default::default() }
}
  • BinInt<Null, I> + O → BinInt<BinInt<Null,I>, O>
  • 例如:1(I)追加0变为10(2)

六、通用情况处理:


impl<HH, HL: Bit, L: Bit, LL: Bit> IntNormalize<LL> for BinInt<BinInt<HH, HL>, L> {type Output = BinInt<Self, LL>;fn int_normalize(self, _: LL) -> Self::Output { Default::default() }
}
  • 对已标准化的多bit整数,直接追加新bit位

  • 保持原有的二进制结构

七、类型别名:


pub type IfB0<H> = <H as IntNormalize<O>>::Output;
pub type IfB1<H> = <H as IntNormalize<I>>::Output;
  • IfB0:类型H追加0后的结果类型

  • IfB1:类型H追加1后的结果类型

八、典型用例:


type P1 = BinInt<Null, I>;  // 1
type P2 = IfB0<P1>;         // 10 (2)
type P3 = IfB1<P1>;         // 11 (3)

这段代码实现了:

  • 二进制整数的类型安全构造

  • 自动标准化处理(无冗余表示)

  • 编译期数值计算

  • 支持任意长度的二进制数扩展

http://www.xdnf.cn/news/1262683.html

相关文章:

  • seo-使用nuxt定义页面标题和meta等信息
  • Nearest Smaller Values(sorting and searching)
  • 3-防火墙
  • 2025年最新Java后端场景题+八股文合集(100w字面试题总结)
  • 华清远见25072班C语言学习day5
  • 基于Spring Boot的Minio图片定时清理实践总结
  • Ideogram:优秀的在线AI绘画平台
  • 【代码随想录day 15】 力扣 110.平衡二叉树
  • HTTP 请求返回状态码和具体含义?200、400、403、404、502、503、504等
  • 机械学习--SVM 算法
  • 用LaTeX优化FPGA开发:结合符号计算与Vivado工具链(二)
  • 华为网路设备学习-28(BGP协议 三)路由策略
  • Android Studio第一个kotlin项目“Hello Android”
  • kafak
  • windows自动获取wsl IP,并开启端口转发。
  • 【代码随想录day 14】 力扣 111.二叉树的最小深度
  • Axure基于中继器实现的组件库(导航菜单、动态表格)
  • Array Description(Dynamic programming)
  • 在发布应用程序内测时如何选择合适的分发上架方式?
  • Git 基础操作笔记(速查)
  • 视频遥测终端机是什么,其工作原理和应用领域
  • 高校合作 | 世冠科技联合普华、北邮项目入选教育部第二批工程案例
  • 01数据结构-图的概念和图的存储结构
  • 数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)
  • 【世纪龙科技】数智重构车身实训-汽车车身测量虚拟实训软件
  • 二叉树实现
  • Docker 创建镜像错误记录
  • Redis缓存击穿、穿透雪崩
  • 【NFTurbo】基于DockerCompose一键部署
  • gmssl私钥文件格式