【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
英文地址,請注明出處:http://en.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 …