【unitrix】 5.0 第二套类型级二进制数基本结构体(types2.rs)

一、源码

这是一个使用 Rust 类型系统实现类型级(type-level)二进制数的设计。

//! 类型级二进制数表示方案(第二套方案)
//!
//! 使用嵌套泛型结构体表示二进制数,支持整数和小数表示。use crate::sealed::Sealed;/// 类型级二进制数结构体
///
/// # 泛型参数说明
/// - `H`: 高位部分
///   - `I` 表示高位为1
///   - `O` 表示高位为0
///   - `B<H, L>` 表示嵌套的高位
///   - `Null` 仅用于顶层结构,表示无更高位
/// - `L`: 低位部分
///   - `I` 表示低位为1
///   - `O` 表示低位为0
///   - `B<H, L>` 表示小数部分
///   - `Null` 仅用于顶层结构,表示无小数部分
///
/// # 表示规则
/// - 整数部分使用嵌套的B结构体表示
/// - 小数部分通过低位的B结构体表示
/// - 规范化表示要求嵌套的B结构体高位不能为Null
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub struct B<H, L>(pub H, pub L);/// 空类型标记,用于表示无更高位或无小数部分
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct Null;impl Null {/// 创建新的Null实例#[inline(always)]pub const fn new() -> Self {Null}
}impl<H: Default, L: Default> Default for B<H, L> {fn default() -> Self {B(Default::default(), Default::default())}
}impl<H, L> B<H, L> {/// 创建新的二进制数实例#[inline]pub fn new(h: H, l: L) -> Self {B(h, l)}
}/// 类型级比特位0(逻辑假)
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct O;impl O {/// 创建新的O实例#[inline(always)]pub const fn new() -> Self {Self}
}/// 类型级比特位1(逻辑真)
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Debug, Default)]
pub struct I;impl I {/// 创建新的I实例#[inline(always)]pub const fn new() -> Self {I}
}// 为类型实现密封标记
impl<H, L> Sealed for B<H, L> {}
impl Sealed for O {}
impl Sealed for I {}
impl Sealed for Null {}

二、源码分析

  1. 核心设计理念:
  • 使用泛型结构体 B<H, L> 表示二进制数,其中 H 是高位,L 是低位

  • 通过类型组合来表示任意长度的二进制数

  • 支持整数和小数的表示

  1. 主要类型定义:

pub struct B<H, L>(pub H, pub L);
  • 二元组结构体,H 表示高位,L 表示低位

  • 可以嵌套使用来表示多位二进制数

  1. 基本位类型:

pub struct O;  // 表示二进制0
pub struct I;  // 表示二进制1
pub struct Null;  // 表示空/无更高位4. 类型组合示例:+ B<I, O> 表示二进制补码 "10" (十进制-2)+ B<B<O, I>, O> 表示二进制 "010" (十进制2)+ B<I, B<I, Null>> 可以表示二进制 "1.1" (小数)+ B<I, Null> 可以表示二进制 "1.0" (小数)5. 实现细节:+ 所有类型都实现了常见的 trait (Eq, Debug)以便于使用+ 提供了 new() 构造函数+ 实现了 Default trait+ 使用 Sealed trait 进行封装保护6. 规范化规则:+ 嵌套的 B 结构体高位不能为 Null+ Null 只用于顶层结构表示边界7. 使用场景:+ 类型级编程+ 编译期计算+ 类型安全的二进制操作这种设计的主要优点是:+ 完全在类型系统层面实现,无运行时开销+ 类型安全 - 非法状态无法表示+ 可扩展 - 可以表示任意长度的二进制数+ 支持小数表示典型用例可能包括:+ 硬件寄存器映射+ 精确数值计算+ 协议解析+ 类型安全的位操作这个实现展示了 Rust 强大的类型系统和泛型能力,能够在编译期保证二进制数的正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88690.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY01:【ML 第一弹】机器学习概述

一、三大概念 1.1 人工智能&#xff08;AI&#xff09; Artificial Intelligence 人工智能AI is the field that studies the synthesis and analysis of computational agents that act intelligently 1.2 机器学习&#xff08;ML&#xff09; Machine Learning 机器学习Fi…

AGX Xavier 搭建360环视教程【一、先确认方案】

设备默认自带 NVIDIA 硬件编解码能力&#xff08;NVDEC/NVENC&#xff09;&#xff0c;但是需要你在 OpenCV 和 FFmpeg 里正确启用 调通 GStreamer 或 nvmpi&#xff0c;才真正能用起来&#xff01;这里的硬解码是核心&#xff1a;Jetson 平台的硬解码&#xff0c;要么走 GStr…

服务器怎么跑Python项目?

在服务器上运行 Python 项目通常涉及 环境配置、依赖安装、项目部署 和 进程管理。以下是详细步骤&#xff1a;1. 连接服务器确保你能通过 SSH 访问服务器&#xff1a;ssh usernameyour_server_ip&#xff08;如果是本地测试&#xff0c;可跳过这一步&#xff09;2. 安装 Pytho…

【软件设计师】

UML 类图中的关系用例图中的关系 关系例子类图用例图顺序图 概念示例通信图活动图泳道图状态图

Java 内部类详解:从基础到实战,掌握嵌套类、匿名类与局部类的使用技巧

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过这样的场景&#xff1a;想在一个类内部定义另一个逻辑相关的类&#xff1b;需要为某个接口或抽象类提供一个临时实现&#xff08;比如监听器&#xff09;&#xff1b;想利用面向对象特性来组织代码结构&#xff0…

Java设计模式之行为型模式(观察者模式)介绍与说明

一、模式结构 观察者模式包含以下四个角色&#xff1a; Subject&#xff08;主题/被观察者&#xff09; 维护观察者列表&#xff0c;提供注册&#xff08;registerObserver&#xff09;、移除&#xff08;removeObserver&#xff09;观察者的方法&#xff0c;并定义通知所有观察…

实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12

我们将创建两个自定义组件&#xff1a; 1. NumericInputField&#xff1a;一个输入框&#xff0c;当点击时弹出数字键盘。 2. NumericKeyboard&#xff1a;一个可缩放的数字键盘。 设计思路&#xff1a; - NumericInputField 是一个常规的输入框&#xff0c;但点击后会弹出 Num…

Java 深入解析:JVM对象创建与内存机制全景图

第一章&#xff1a;引言 Java 是一种面向对象的编程语言&#xff0c;对象&#xff08;Object&#xff09;是其最基本的组成单位。Java 的“一切皆对象”不仅体现在语法层面&#xff0c;更体现在运行时&#xff0c;几乎所有数据都以对象形式存在于内存中。 然而&#xff0c;很…

Redis 基本操作笔记

1. Redis 简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的键值对存储系统&#xff0c;通常作为数据库、缓存、消息中间件等使用。它支持多种数据类型&#xff0c;包括字符串、哈希、列表、集合、有序集合等。 Redis 特点&#xff1a; 性能&…

Docker从环境配置到应用上云的极简路径

Docker从环境配置到应用上云的极简路径主要包括环境配置、应用容器化、选择云平台及部署应用等步骤&#xff0c;具体如下&#xff1a; - 配置Docker环境&#xff1a; - 安装Docker&#xff1a;根据操作系统下载对应版本的Docker安装包。如在Linux系统中&#xff0c;可使用命令…

Slicer渲染Dicom到nrrd

Slicer渲染Dicom到nrrd 工作中遇到一些处理Dicom数据的需求&#xff0c;个人通过网络上的一些教程 对于原始数据尝试转换到nrrd时&#xff0c;发现部分的窗体数据的渲染方向不一致 进一步发现这些很多定义的方向是跟设备厂家强相关的&#xff0c;不同厂家对于同一段的Dicom参…

QT中设计qss字体样式但是没有用【已解决】

检查一下stylesheet里面是不是有不能被QT读取的CSS语言&#xff0c;可能会跟字体颜色冲突错误示范&#xff1a;/* 错误示例&#xff1a;QSS 中使用 box-shadow */ QPushButton {box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); /* Qt 不支持此属性 */ }删掉就行了如果后续想用阴影…

uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏

相关API uni.getSystemInfoSync() uni.getMenuButtonBoundingClientRect() 创建一个utils文件夹&#xff0c;该文件下封装一个systemInfo.js /*** 系统信息工具类* 封装获取系统状态栏、导航栏和安全区域等相关信息的方法*/// 获取系统信息并缓存 const systemInfo uni.get…

jQuery 文本属性值

一、前言在网页开发中&#xff0c;我们经常需要对页面上的文本内容进行操作&#xff0c;例如动态修改段落文字、读取用户输入框的内容、更新按钮文本等。jQuery 提供了简洁而强大的方法来处理这些常见的文本操作需求。本文将带你全面了解 jQuery 中用于操作文本内容的三个核心方…

JAVA并发——为什么Java中的ThreadLocal对key的引用为弱引用

1、ThreadLocal 的用途 给每个线程提供自己独立的变量副本&#xff0c;实现线程间隔离。 常用于&#xff1a; 数据库连接、Session 缓存、用户上下文&#xff08;如 userId&#xff09;线程池中的线程复用时避免共享污染&#xff1b;实现线程封闭的设计模式 2、内存泄漏 使用弱…

【C++】多线程同步三剑客介绍

目录 条件变量 头文件 主要操作函数 1、等待操作 2、唤醒操作 使用示例 信号量 头文件 主要操作函数 1、信号量初始化 2、等待操作&#xff08;P操作&#xff09; 3、信号操作&#xff08;V操作&#xff09; 4、获取信号量值 5、销毁信号量 使用示例 互斥锁 …

《Java Web程序设计》实验报告八 JSP+Servlet+JDBC+MySQL实现课程管理

目 录 一、实验目的 二、实验环境 三、实验步骤和内容 1、小组成员分工&#xff08;共计4人&#xff09; 2、实验方案 3、实验结果与分析 4、项目任务评价 四、遇到的问题和解决方法 五、实验总结 一、实验目的 1、掌握mysql的安装、数据库表单创建 2、掌握JDBC的链接…

基于数据挖掘的课程推荐系统研究

摘要本研究设计并开发了一套基于先进数据挖掘技术的智能化课程推荐系统。该系统创新性地采用了协同过滤算法与内容推荐算法相结合的混合推荐策略&#xff0c;通过深度分析学生在学习平台上的历史行为数据&#xff08;包括选课记录、学习时长、测试成绩等&#xff09;以及课程的…

【SCI 4区推荐】《Journal of Visual Communication and Image Representation》

期刊简介&#xff1a;《视觉传达与图像表示杂志》&#xff08;Journal of Visual Communication and Image Representation&#xff09;致力于发表视觉传达与图像表示领域的最前沿研究&#xff0c;特别强调多学科交叉领域中的新技术和理论应用。这本期刊涵盖的研究范围广泛&…

20250711_Sudo 靶机复盘

target:192.168.43.20 外部打点 &#xff08;文件上传&#xff09; nmap扫一下&#xff0c;80,22 开放 扫目录&#xff0c;发现 README.md [17:04:30] 200 - 664B - /Dockerfile [17:04:38] 200 - 34KB - /LICENSE …