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

【PhysUnits】14 二进制数的标准化表示(standardization.rs)

一、源码

这段代码主要用于处理二进制数的标准化表示。它定义了两个特质(trait) IfB0 和 IfB1,以及它们的实现,用于处理二进制数的前导零及前导一的简化。

use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 处理 B0<H> 类型的标准化
/// Standardization for B0<H> types
///
/// 当高位 H 为 Z0 时,将 B0<Z0> 转换为 Z0
/// Converts B0<Z0> to Z0 when higher bit H is Z0
pub trait IfB0 {type Output;fn standardization() -> Self::Output;
}/// 处理 B1<H> 类型的标准化  
/// Standardization for B1<H> types
///
/// 当高位 H 为 N1 时,将 B1<N1> 转换为 N1
/// Converts B1<N1> to N1 when higher bit H is N1
pub trait IfB1 {type Output;fn standardization() -> Self::Output;
}// ==================== IfB0 实现 ====================
impl<I: Integer + NonZero> IfB0 for I {type Output = B0<I>;#[inline]fn standardization() -> Self::Output {B0::new()}
}impl IfB0 for Z0 {//去除B0<Z0>type Output = Z0;#[inline]fn standardization() -> Self::Output {Z0::new()}
}// ==================== IfB1 实现 ====================
impl<I: Integer + NonNegOne> IfB1 for I {type Output = B1<I>;#[inline]fn standardization() -> Self::Output {B1::new()}
}impl IfB1 for N1 {//去除B1<N1>type Output = N1;#[inline]fn standardization() -> Self::Output {N1::new()}
}

二、导入和依赖

use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};
  • 从父模块中导入了一些基本类型和标记trait:

    • B0, B1:表示二进制位的0和1

    • Z0, N1:单独使用表示零和负一,也可以是符号位

    • Integer, NonZero, NonNegOne:标记trait用于类型约束

三、IfB0 trait

pub trait IfB0 {type Output;fn standardization() -> Self::Output;
}

这个trait用于处理以B0开头的二进制数的标准化:

  • 当高位是Z0时,将B0转换为Z0(去除前导零)

  • 否则保留B0结构

实现部分:
impl<I: Integer + NonZero> IfB0 for I {type Output = B0<I>;fn standardization() -> Self::Output { B0::new() }
}impl IfB0 for Z0 {type Output = Z0;fn standardization() -> Self::Output { Z0::new() }
}
  • 第一个实现:对于任何非零整数类型I,B0保持不变

  • 第二个实现:特殊处理B0,将其简化为Z0

四、IfB1 trait

pub trait IfB1 {type Output;fn standardization() -> Self::Output;
}

这个trait用于处理以B1开头的二进制数的标准化:

  • 当高位是N1时,将B1转换为N1

  • 否则保留B1结构

实现部分:
impl<I: Integer + NonNegOne> IfB1 for I {type Output = B1<I>;fn standardization() -> Self::Output { B1::new() }
}impl IfB1 for N1 {type Output = N1;fn standardization() -> Self::Output { N1::new() }
}
  • 第一个实现:对于任何不是N1的整数类型I,B1保持不变

  • 第二个实现:特殊处理B1,将其简化为N1

五、代码作用总结

这段代码实现了一个类型级的二进制数标准化系统:

  1. 消除前导零(如B0 → Z0)

  2. 简化负数前导一(如B1 → N1)

  3. 保持其他有效二进制数的结构不变

这种技术常见于类型级编程中,用于在编译时保证数据的规范形式,通常用于嵌入式领域或需要编译时计算的应用中。

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

相关文章:

  • 【第1章 基础知识】1.6 事件处理
  • 嵌入式自学第二十九天(5.27)
  • 北京大学 | DeepSeek内部研讨资料:AI工具深度测评与选型指南,319页
  • 系统编程day05
  • 基于 STM32 的智慧农业温室控制系统设计与实现
  • 学习python day9
  • DeviceNET转EtherCAT协议转换网关解读
  • Qwen3内置提示词模板解读
  • 数据库大学实验一
  • 投影机三色光源和单色光源实拍对比:一场视觉体验的终极较量
  • 知识图谱系列(4):查询与推理技术
  • 第四十七篇-Tesla P40+Qwen3-30B-A3B部署与测试
  • 什么是PLM软件?离散制造业和流程制造业的主流PLM介绍、国产PLM应用案例
  • 5月27日星期二今日早报简报微语报早读
  • RuoYi前后端分离框架集成Jasypt实现配置信息加密
  • Kubernetes简介及常用命令
  • 高效大电流缓启动电路设计
  • Manus,AGI 要来临了吗?
  • 电子电路:欧姆定律和电流量子化有关系吗?
  • 深入剖析机器学习之波士顿房价案例
  • 易境通海外仓系统:如何提高仓库尾程派送环节效率?
  • 「Python教案」循环语句的使用
  • 离子风机如何保障汽车电子智造组装车间良品率
  • C语言数据存储
  • 操作系统——第四章(文件共享、保护、层级结构、系统布局..)
  • Docker+MobaXterm+x11实现容器UI界面转发本地
  • Python map()函数详解:批量数据处理的瑞士军刀
  • STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
  • STM32之IIC(重点)和OLED屏
  • Spring Boot整合JWT实现认证与授权