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

【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. 保持其他有效二进制数的结构不变

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

相关文章:

  • 封装索引列表
  • 四、web安全-行业术语
  • 汽车电子/电气(E/E)架构将朝着区域(分区)式架构方向发展
  • Mac redis下载和安装
  • JavaEE初阶-网络编程
  • javaEE1
  • 从大模型加载到交互:3D Web轻量化引擎HOOPS Communicator如何打造流畅3D体验?
  • Django ToDoWeb 服务
  • 【JavaEE】-- 文件操作和IO
  • qml和JavaScript的QtObject是 QML 中用于存储无界面,纯数据。应用场景:计算器、遥控器、告警类型映射
  • 如何理解UDP 和 TCP 区别 应用场景
  • 前端生成UUID
  • Codeforces Round 1027 (Div. 3)
  • 学习日记-day17-5.27
  • 计算机网络练习题
  • 网络:华为S5720-52X-SI交换机重置console密码
  • 涨薪技术|0到1学会性能测试第84课-Windows Sockets数据操作
  • Nest全栈到失业(一):Nest基础知识扫盲
  • LeetCode 118 题解--杨辉三角
  • leetcode每日一题(好几天之前的) -- 3068.最大节点价值之和
  • 太原网站建设价格套餐/电商代运营公司排名
  • 做网站建设的公司有哪些内容/长沙网动网络科技有限公司
  • 网站建设设计方案格式/今天的新闻最新消息
  • 网络营销包括的主要内容有/外贸推广优化公司
  • wordpress登录没反应/南宁seo
  • 做网站必须学php吗/杭州旺道企业服务有限公司