【Typenum】 3 类型位运算(bit.rs)
一、源码
代码定义了一个类型级别的位(bit)系统,主要用于编译时的类型运算。
//! 类型级比特位实现
//!
//! 这些是基础的比特位类型,作为本库中其他数值类型的构建基础
//!
//! 已实现的**类型运算符**:
//!
//! - 来自 `core::ops` 的:`BitAnd`(与), `BitOr`(或), `BitXor`(异或) 和 `Not`(非)
//! - 来自 `typenum` 的:`Same`(相同比较) 和 `Cmp`(比较)use crate::{private::InternalMarker, Cmp, Equal, Greater, Less, NonZero, PowerOfTwo, Zero};
use core::ops::{BitAnd, BitOr, BitXor, Not};pub use crate::marker_traits::Bit;/// 类型级比特位0
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash, Debug, Default)]
#[cfg_attr(feature = "scale_info", derive(scale_info::TypeInfo))]
pub struct B0;impl B0 {/// 创建表示该比特位的单例实例#[inline]pub fn new() -> B0 {B0}
}/// 类型级比特位1
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash, Debug, Default)]
#[cfg_attr(feature = "scale_info", derive(scale_info::TypeInfo))]
pub struct B1;impl B1 {/// 创建表示该比特位的单例实例#[inline]pub fn new() -> B1 {B1}
}/// 为B0实现Bit特征
impl Bit for B0 {const U8: u8 = 0; // u8表示为0const BOOL: bool = false; // bool表示为false#[inline]fn new() -> Self {Self}#[inline]fn to_u8() -> u8 {0 // 转换为u8返回0}#[inline]fn to_bool() -> bool {false // 转换为bool返回false}
}/// 为B1实现Bit特征
impl Bit for B1 {const U8: u8 = 1; // u8表示为1const BOOL: bool = true; // bool表示为true#[inline]fn new() -> Self {Self}#[inline]fn to_u8() -> u8 {1 // 转换为u8返回1}#[inline]fn to_bool() -> bool {true // 转换为bool返回true}
}impl Zero for B0 {} // 标记B0为零值类型
impl NonZero for B1 {} // 标记B1为非零值类型
impl PowerOfTwo for B1 {} // 标记B1为2的幂次方类型/// 实现B0的逻辑非运算 (!0 = 1)
impl Not for B0 {type Output = B1; // 输出类型为B1#[inline]fn not(self) -> Self::Output {B1 // 返回B1实例}
}/// 实现B1的逻辑非运算 (!1 = 0)
impl Not for B1 {type Output = B0; // 输出类型为B0#[inline]fn not(self) -> Self::Output {B0 // 返回B0实例}
}/// 实现B0与任意比特位的与运算 (0 & B = 0)
impl<Rhs: Bit> BitAnd<Rhs> for B0 {type Output = B0; // 输出类型总是B0#[inline]fn bitand(self, _: Rhs) -> Self::Output {B0 // 返回B0实例}
}/// 实现B1与B0的与运算 (1 & 0 = 0)
impl BitAnd<B0> for B1 {type Output = B0; // 输出类型为B0#[inline]fn bitand(self, _: B0) -> Self::Output {B0 // 返回B0实例}
}/// 实现B1与B1的与运算 (1 & 1 = 1)
impl BitAnd<B1> for B1 {type Output = B1; // 输出类型为B1#[inline]fn bitand(self, _: B1) -> Self::Output {B1 // 返回B1实例}
}/// 实现B0与B0的或运算 (0 | 0 = 0)
impl BitOr<B0> for B0 {type Output = B0; // 输出类型为B0#[inline]fn bitor(self, _: B0) -> Self::Output {B0 // 返回B0实例}
}/// 实现B0与B1的或运算 (0 | 1 = 1)
impl BitOr<B1> for B0 {type Output = B1; // 输出类型为B1#[inline]fn bitor(self, _: B1) -> Self::Output {B1 // 返回B1实例}
}/// 实现B1与任意比特位的或运算 (1 | B = 1)
impl<Rhs: Bit> BitOr<Rhs> for B1 {type Output = B1; // 输出类型总是B1#[inline]fn bitor(self, _: Rhs) -> Self::Output {B1 // 返回B1实例}
}/// 实现B0与B0的异或运算 (0 ^ 0 = 0)
impl BitXor<B0> for B0 {type Output = B0; // 输出类型为B0#[inline]fn bitxor(self, _: B0) -> Self::Output {B0 // 返回B0实例}
}/// 实现B1与B0的异或运算 (1 ^ 0 = 1)
impl BitXor<B0> for B1 {type Output = B1; // 输出类型为B1#[inline]fn bitxor(self, _: B0) -> Self::Output {B1 // 返回B1实例}
}/// 实现B0与B1的异或运算 (0 ^ 1 = 1)
impl BitXor<B1> for B0 {type Output = B1; // 输出类型为B1#[inline]fn bitxor(self, _: B1) -> Self::Output {B1 // 返回B1实例}
}/// 实现B1与B1的异或运算 (1 ^ 1 = 0)
impl BitXor<B1> for B1 {type Output = B0; // 输出类型为B0#[inline]fn bitxor(self, _: B1) -> Self::Output {B0 // 返回B0实例}
}/// 比特位运算测试模块
#[cfg(test)]
mod bit_op_tests {use core::ops::{BitAnd, BitOr, BitXor, Not};use crate::{B0, B1};// 测试运算结果的宏,使用`Same`确保类型相等而不仅是值相等macro_rules! test_bit_op {($op:ident $Lhs:ident = $Answer:ident) => {{type Test = <<$Lhs as $op>::Output as $crate::Same<$Answer>>::Output;assert_eq!(<$Answer as $crate::Bit>::to_u8(),<Test as $crate::Bit>::to_u8());}};($Lhs:ident $op:ident $Rhs:ident = $Answer:ident) => {{type Test = <<$Lhs as $op<$Rhs>>::Output as $crate::Same<$Answer>>::Output;assert_eq!(<$Answer as $crate::Bit>::to_u8(),<Test as $crate::Bit>::to_u8());}};}#[test]fn bit_operations() {// 测试所有位运算组合test_bit_op!(Not B0 = B1);test_bit_op!(Not B1 = B0);test_bit_op!(B0 BitAnd B0 = B0);test_bit_op!(B0 BitAnd B1 = B0);test_bit_op!(B1 BitAnd B0 = B0);test_bit_op!(B1 BitAnd B1 = B1);test_bit_op!(B0 BitOr B0 = B0);test_bit_op!(B0 BitOr B1 = B1);test_bit_op!(B1 BitOr B0 = B1);test_bit_op!(B1 BitOr B1 = B1);test_bit_op!(B0 BitXor B0 = B0);test_bit_op!(B0 BitXor B1 = B1);test_bit_op!(B1 BitXor B0 = B1);test_bit_op!(B1 BitXor B1 = B0);}
}/// 实现B0与B0的比较 (0 == 0)
impl Cmp<B0> for B0 {type Output = Equal; // 输出为相等#[inline]fn compare<P: InternalMarker>(&self, _: &B0) -> Self::Output {Equal // 返回相等}
}/// 实现B0与B1的比较 (0 < 1)
impl Cmp<B1> for B0 {type Output = Less; // 输出为小于#[inline]fn compare<P: InternalMarker>(&self, _: &B1) -> Self::Output {Less // 返回小于}
}/// 实现B1与B0的比较 (1 > 0)
impl Cmp<B0> for B1 {type Output = Greater; // 输出为大于#[inline]fn compare<P: InternalMarker>(&self, _: &B0) -> Self::Output {Greater // 返回大于}
}/// 实现B1与B1的比较 (1 == 1)
impl Cmp<B1> for B1 {type Output = Equal; // 输出为相等#[inline]fn compare<P: InternalMarker>(&self, _: &B1) -> Self::Output {Equal // 返回相等}
}use crate::Min;
/// 实现B0与B0的最小值比较 (min(0,0)=0)
impl Min<B0> for B0 {type Output = B0;#[inline]fn min(self, _: B0) -> B0 {self // 返回自身}
}/// 实现B0与B1的最小值比较 (min(0,1)=0)
impl Min<B1> for B0 {type Output = B0;#[inline]fn min(self, _: B1) -> B0 {self // 返回自身}
}/// 实现B1与B0的最小值比较 (min(1,0)=0)
impl Min<B0> for B1 {type Output = B0;#[inline]fn min(self, rhs: B0) -> B0 {rhs // 返回参数值}
}/// 实现B1与B1的最小值比较 (min(1,1)=1)
impl Min<B1> for B1 {type Output = B1;#[inline]fn min(self, _: B1) -> B1 {self // 返回自身}
}use crate::Max;
/// 实现B0与B0的最大值比较 (max(0,0)=0)
impl Max<B0> for B0 {type Output = B0;#[inline]fn max(self, _: B0) -> B0 {self // 返回自身}
}/// 实现B0与B1的最大值比较 (max(0,1)=1)
impl Max<B1> for B0 {type Output = B1;#[inline]fn max(self, rhs: B1) -> B1 {rhs // 返回参数值}
}/// 实现B1与B0的最大值比较 (max(1,0)=1)
impl Max<B0> for B1 {type Output = B1;#[inline]fn max(self, _: B0) -> B1 {self // 返回自身}
}/// 实现B1与B1的最大值比较 (max(1,1)=1)
impl Max<B1> for B1 {type Output = B1;#[inline]fn max(self, _: B1) -> B1 {self // 返回自身}
}/// 比特位创建测试模块
#[cfg(test)]
mod bit_creation_tests {#[test]fn bit_creation() {{use crate::{B0, B1};let _: B0 = B0::new(); // 测试B0创建let _: B1 = B1::new(); // 测试B1创建}{use crate::{Bit, B0, B1};let _: B0 = <B0 as Bit>::new(); // 通过Bit特征创建B0let _: B1 = <B1 as Bit>::new(); // 通过Bit特征创建B1}}
}
二、解析
- 基础位类型
pub struct B0; // 类型级二进制0
pub struct B1; // 类型级二进制1
-
这两个空结构体分别表示逻辑值0和1
-
都实现了Bit特征,提供to_u8()和to_bool()转换方法
- 类型特征标记
impl Zero for B0 {} // 标记0值
impl NonZero for B1 {} // 标记非零值
impl PowerOfTwo for B1 {} // 标记2的幂次方
- 位运算实现
逻辑非(NOT)
impl Not for B0 { type Output = B1; } // !0 = 1
impl Not for B1 { type Output = B0; } // !1 = 0
逻辑与(AND)
// 0 & _ = 0
impl<Rhs: Bit> BitAnd<Rhs> for B0 { type Output = B0; }// 1 & 0 = 0
impl BitAnd<B0> for B1 { type Output = B0; }// 1 & 1 = 1
impl BitAnd<B1> for B1 { type Output = B1; }
逻辑或(OR)
// 0 | 0 = 0
impl BitOr<B0> for B0 { type Output = B0; }// 0 | 1 = 1
impl BitOr<B1> for B0 { type Output = B1; }// 1 | _ = 1
impl<Rhs: Bit> BitOr<Rhs> for B1 { type Output = B1; }
异或(XOR)
impl BitXor<B0> for B0 { type Output = B0; } // 0^0=0
impl BitXor<B0> for B1 { type Output = B1; } // 1^0=1
impl BitXor<B1> for B0 { type Output = B1; } // 0^1=1
impl BitXor<B1> for B1 { type Output = B0; } // 1^1=0
- 比较运算
impl Cmp<B0> for B0 { type Output = Equal; } // 0 == 0
impl Cmp<B1> for B0 { type Output = Less; } // 0 < 1
impl Cmp<B0> for B1 { type Output = Greater; } // 1 > 0
impl Cmp<B1> for B1 { type Output = Equal; } // 1 == 1
- 最值运算
impl Min<B1> for B0 { type Output = B0; } // min(0,1)=0
impl Max<B1> for B0 { type Output = B1; } // max(0,1)=1
// ...其他组合类似
设计特点
-
零成本抽象:所有运算在编译期完成
-
类型安全:通过特征约束保证合法操作
-
可扩展性:作为其他数值类型的基础构件
-
模式化实现:统一的操作模板
典型应用场景
-
硬件寄存器位操作的类型安全抽象
-
编译期计算的布尔代数系统
-
类型级状态机的实现基础
这种类型级编程技术在嵌入式开发、协议解析等需要精确位控制的领域特别有用,能在编译阶段捕获位操作错误。
相关文章:
【Typenum】 3 类型位运算(bit.rs)
一、源码 代码定义了一个类型级别的位(bit)系统,主要用于编译时的类型运算。 //! 类型级比特位实现 //! //! 这些是基础的比特位类型,作为本库中其他数值类型的构建基础 //! //! 已实现的**类型运算符**: //! //! - …...
python:trimesh 用于 STL 文件解析和 3D 操作
python:trimesh 是一个用于处理三维模型的库,支持多种格式的导入导出,比如STL、OBJ等,还包含网格操作、几何计算等功能。 Python Trimesh 库使用指南 安装依赖库 pip install trimesh Downloading trimesh-4.6.8-py3-none-any.w…...
stm32week15
stm32学习 十一.中断 2.NVIC Nested vectored interrupt controller,嵌套向量中断控制器,属于内核(M3/4/7) 中断向量表:定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址,中断向量表定…...
数据库分库分表实战指南:从原理到落地
1. 为什么要分库分表? 1.1 单库瓶颈表现 存储瓶颈:单表数据超过5000万行,查询性能急剧下降性能瓶颈:单库QPS超过5000后响应延迟显著增加可用性风险:单点故障导致全系统不可用 1.2 突破性优势 --------------------…...
雷达工程师面试题目
雷达工程师面试题目 一、基础知识类 简述雷达的工作原理 请从电磁波的发射、传播、反射以及回波接收处理等环节,详细阐述雷达如何实现对目标的探测、定位与跟踪。 常见雷达体制及其特点 列举至少三种常见的雷达体制(如脉冲雷达、连续波雷达、相控阵雷达等),并分别说明…...
JVM-类加载子系统
最近在学习JVM,分模块整理一下JVM的笔记 目录 类加载子系统 一、加载 二、链接 1.验证 2.准备 3.解析 三、初始化 类加载子系统 类加载子系统负责将字节码文件加载到虚拟机中,我们正常编写完一个Java类并在前端编译器编译后会生成一个对应的字节码…...
从0开始学习大模型--Day06--大模型的相关网络架构
云服务器 在平时,我们总能听到诸如用服务器跑数据、模型,或者是搭建服务器之类的话,实际上,它相当于一台算力、内存、运行内存等各个方面都很强大的电脑,只需要我们用自己的电脑通过互联网链接他就能使用它࿰…...
控制LED灯设备
本章分别使用C库和系统调用的文件操作方式控制开发板的LED灯,展示如何在应用层通过系统提供的设备文件控制相关硬件。 本章的示例代码目录为:base_code/linux_app/led/sys_class_leds。 9.1. LED子系统 在Linux系统中,绝大多数硬件设备都有…...
Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在现代网页中,一个精致的 Contact 区域不仅仅是表单的堆砌,更是用户与我们建立联系的第一印象。 在本节课中,我…...
Python-MCPAgent开发-DeepSeek版本
Python-MCPAgent开发-DeepSeek版本 尝试Windows使用Python完成【McpServer】【McpAgent】开发,当前使用OpenAI-Agents框架进行开发 1-核心知识点 先完成【LLM】配置再完成【McpServer】开发再完成【Agent】开发完成【LLM】【McpServer】【Agent】请求互通 2-思路整…...
Linux:43线程封装与互斥lesson31
mmap文件映射视屏:待看... 目录 线程栈 代码证明:一个线程的数据,其他线程也可以访问 线程封装 简单封装,2.thread Thread.hpp Main.cc Makefile 结果: 编辑 问题1: 问题2: lamba表达式 模版封…...
stm32测频率占空比最好的方案
频率检测, 方案方法很多种, 其中最快最节省资源的方法. 分享给大家. 其它的方案都试过, 问题多多. 适合单片机在工业应用中, 1MHZ以下的频率检测. 1MHZ估计也行. 但是偏差估计是变大了. 我试过很多种方案, 可以看我前面的文章. 最后发现目前这种方案最为优秀. 主要特点为不占用…...
Redis--常见数据类型List列表
目录 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、内部编码 一、概念 列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素&…...
Linux : 多线程【线程概念】
Linux : 多线程【线程概念】 (一)线程概念线程是什么用户层的线程linux中PID与LWP的关系 (二) 进程地址空间页表(三) 线程总结线程的优点线程的缺点线程异常线程用途 (一)线程概念 线程是什么 在一个程序里的一个执行…...
React+Springboot项目部署ESC服务器
记录一下我个人部署Linux服务器的心得 环境介绍 ESC服务器创建时默认安装LNMP,即Linux,Nginx,Mysql,Php 所以这里不讲怎么安装Nignx和Mysql 笔者使用的Linux版本为22.0.4LTS版 前端打包 运行React打包命令进行前端项目的打包…...
python-Pandas库详细教程
python-Pandas库详细教程1 定义使用方法: 一、导入Pandas库代码 二、DataFrame用法Pandas索引 groupby()数值计算 定义 python中特定用于数据分析、处理的模板库。 优点: 处理数据便捷、简单。 使用方法: 处理“.csv”数据:rea…...
力扣刷题Day 46:搜索二维矩阵 II(240)
1.题目描述 2.思路 方法1:分别找到搜索矩阵的右、下边界,然后从[0][0]位置开始遍历这部分矩阵搜索目标值。 方法2:学习Krahets佬的思路,从搜索矩阵的左下角开始遍历,matrix[i][j] > target时消去第i行,…...
C++:类和对象4
一,日期类实现 学习建议: 对于计算机学习来说,调试十分重要,所以在日常学习中一定要加大代码练习,刷代码题和课后自己敲出课上代码例题,注意不要去对比正确代码或者网上找正确代码直接使用,一…...
【软件工程】基于机器学习的多缺陷定位
基于机器学习的多缺陷定位(Multi-Dault Localization, MDL)是软件工程和自动化测试领域的重要研究方向,旨在通过机器学习技术高效识别代码中多个潜在缺陷的位置。以下从方法、挑战、应用场景及未来方向展开分析: 一、核心方法 监督…...
互联网大厂Java求职面试实战:Spring Boot到微服务的技术问答解析
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升 导读:2025年5月2日,Anthropic 宣布 Claude 推出 Integrations 集成功能和增强型高级研究功能。Integrations 基于 …...
飞蛾扑火算法matlab实现
注意:此代码实现的是求目标函数最大值,求最小值可将适应度函数乘以-1(框架代码已实现)。 注意:此代码实现的是求目标函数最大值,求最小值可将适应度函数乘以-1(框架代码已实现)。 注…...
vector--OJ1
链接: link class Solution { public:int singleNumber(vector<int>& nums) {int ret0;for(auto a : nums){ret^a;}return ret;} };链接: link class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>>…...
多模态大语言模型arxiv论文略读(六十八)
Image-of-Thought Prompting for Visual Reasoning Refinement in Multimodal Large Language Models ➡️ 论文标题:Image-of-Thought Prompting for Visual Reasoning Refinement in Multimodal Large Language Models ➡️ 论文作者:Qiji Zhou, Ruoc…...
【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
mysql高可用MHA(Master High Availability)方案 集群部署模式下的高可用方案一、高可用架构原理1. 核心组件2. 故障切换流程 二、详细部署步骤 (3节点集群)1. 环境准备2. 节点配置(以 node1 为例)3. 初始化集群4. 部署MySQL Route…...
类型别名与接口的对比与选择
在 TypeScript 中,类型系统是非常强大且灵活的。两种最常用的类型定义方式就是 类型别名(type) 和 接口(interface)。它们看似相似,实际上在用法和功能上有所不同。在本文中,我们将深入探讨类型…...
《Effective Python》第1章 Pythonic 思维详解——始终用括号包裹单元素元组
《Effective Python》第1章 Pythonic 思维详解——始终用括号包裹单元素元组 在 Python 编程语言中,元组(tuple)是一种不可变的数据结构,常用于表示一组固定的值。尽管元组的语法看似简单,但其中却隐藏着一些微妙的陷…...
【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
ETcTI_smart_parking智能停车系统深度解析 1. 项目概述2. 技术原理与系统架构2.1 核心算法1) 车牌识别算法2) ETC交易验证 2.2 系统架构 3. 实战部署指南3.1 环境配置3.2 硬件部署规范3.3 系统初始化 4. 常见问题与解决方案4.1 ETC交易失败4.2 车牌识别异常4.3 系统性能瓶颈 5.…...
LintCode第807题-回文数II
描述 判断一个非负整数 n 的二进制表示是否为回文数 我们保证 0 < n < 2^32 - 1 样例1 输入: n 0 输出: True 解释: 0 的二进制表示为:0。 样例2 输入: n 3 输出: True 解释: 3 的二进制表示为:11。 样例3 输入: n 4 输出: False 解释:…...
快速傅里叶变换暴力涨点!基于时频特征融合的高创新时间序列分类模型
往期精彩内容: 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门!锂电池剩余寿命预测(Python)-CSDN博客 超强预测模型:二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解,BiLSTM-Attention预测模型…...
股指期货的保证金交易和资金门槛是多少?
股指期货和股票交易最大的区别,就是它不用“全款买房”,而是“首付买房”——只需交一笔保证金就能撬动大额资金,但这也说明了门槛高、风险大。下面就来拆解,到底要准备多少钱才能“上车”。 一、保证金交易:用12万撬…...
spark:map 和 flatMap 的区别(Scala)
场景设定 假设有一个包含句子的 RDD: scala val rdd sc.parallelize(List("Hello World", "Hi Spark")) 目标是:将每个句子拆分成单词。 1. 用 map 的效果 代码示例 scala val resultMap rdd.map(sentence > sentence…...
判断两台设备是否在同一局域网内的具体方法
以下是判断两台设备是否在同一局域网内的具体方法: 1. 检查IP地址和子网掩码 操作步骤: Windows系统: 按 Win R 键,输入 cmd 并回车。输入 ipconfig,查看 IPv4 地址 和 子网掩码(如 192.168.1.5/255.255.2…...
cmake:test project
本文主要探讨cmake在测试和项目中的应用。 add_test add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS]) add_test(NAME test_uni COMMAND $<TARGET_F…...
Qwen-2.5 omni
问题1 Qwen2.5-Omni的主要功能是什么? Qwen2.5-Omni的主要功能是处理和生成多种模态的数据,包括文本、图像、音频和视频。它能够同时理解和生成这些模态的信息,支持复杂的多模态任务,例如语音对话、视频理解、图像描述生成等。 …...
Problem D: 异常2
1.题目描述 检查危险品程序:生成货物类、机器类,货物类有属性name,机器类有检测的check方法,若货物名称是炸弹、毒药、刀具,则抛出异常提示。 代码如下: import java.util.Scanner; class goods{ Stri…...
AI智慧公园管理方案:用科技重塑市民的“夜游体验”
AI智慧公园管理方案:多场景智能巡检与安全防控 一、背景与痛点分析 夏季夜间,公园成为市民休闲娱乐的核心场所,但管理难度随之激增: 宠物管理失控:未牵绳宠物进入园区,随地排泄、惊扰游客,甚…...
AJAX原理
AJAX使用XHR 对象和服务器进行数据交互 XHR <p class"my-p"></p><script>const xhr new XMLHttpRequest()xhr.open(GET,http://hmajax.itheima.net/api/province)xhr.addEventListener(loadend,()>{// console.log(xhr.response)const data …...
内存泄露,如何判断是资源泄露还是堆栈泄露?
作为软件测试工程师,判断内存泄露类型对于定位和解决问题至关重要。以下是区分资源泄露和堆栈泄露的方法: 1. 基本概念区分 资源泄露(Resource Leak): 指非内存资源未正确释放,如文件句柄、数据库连接、网络套接字等 虽然不直接表现为Java堆内存增长,但会导致系统资源耗…...
无人甘蔗小车履带式底盘行走系统的研究
1.1 研究背景与意义 1.1.1 研究背景 甘蔗作为全球最重要的糖料作物之一,在农业经济领域占据着举足轻重的地位。我国是甘蔗的主要种植国家,尤其是广西、广东、云南等地,甘蔗种植面积广泛,是当地农业经济的重要支柱产业。甘蔗不仅…...
Redis设计与实现——单机Redis实现
RedisDB RedisDB的核心结构 键空间(dict*dict) 结构:哈希表(字典),键为字符串对象(SDS),值为 Redis 对象(字符串、列表、哈希等)。 功能&#x…...
ES C++客户端安装及使用
介绍 Elasticsearch , 简称 ES ,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源&…...
C++学习之STL学习
在经过前面的简单的C入门语法的学习后,我们开始接触C最重要的组成部分之一:STL 目录 STL的介绍 什么是STL STL的历史 UTF-8编码原理(了解) UTF-8编码原理 核心编码规则 规则解析 编码步骤示例 1. 确定码点范围 2. 转换为…...
【东枫科技】使用LabVIEW进行NVIDIA CUDA GPU 开发
文章目录 工具包 CuLab - LabVIEW 的 GPU 工具包特性和功能功能亮点类似 LabVIEW 的 GPU 代码开发支持的功能数值类型和维数开发系统要求授权售价 工具包 CuLab - LabVIEW 的 GPU 工具包 CuLab 是一款非常直观易用的 LabVIEW 工具包,旨在加速 Nvidia GPU 上的计算密…...
LangChain对话链:打造智能多轮对话机器人
LangChain对话链:打造智能多轮对话机器人 目录 LangChain对话链:打造智能多轮对话机器人ConversationChain 是什么核心功能与特点基本用法示例内存机制自定义提示词应用场景与其他链的结合`SequentialChain` 是什么![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0…...
MIT 6.S081 2020 Lab3 page tables 个人全流程
文章目录 零、写在前面1、关于页表2、RISC-V Rv39页表机制3、虚拟地址设计4、页表项设计5、访存流程6、xv6 的页表切换7、页表遍历 一、Print a page table1.1 说明1.2 实现 二、A kernel page table per process2.1 说明2.2 初始化 / 映射相关2.3 用户内核页表的创建和回收2.4…...
spring cloud loadbalancer实现机房感知的负载均衡
1 概述 在同城多机房情景下,各个机房各自部署一套微服务集群,正常情况下微服务调用在本机房闭环。在如下某些灾难情景,可以尝试拉远调用以最大程度维持业务连续性,这些情景例如: A机房多个服务器宕机。应用由于BUG发…...
vs2022配置opencv
一、下载opencv 1、进入https://opencv.org/官网下载 2、打开下载的exe开始安装,自己新建一个文件夹opencv作为安装路径 3、安装完成得到opencv文件内容 4、开始配置环境变量 4.1、复制下图的路径 4.2、添加到系统环境变量 5、配置VS项目环境 5.1、添加包含目录 …...
Appium-OppoA92S-真机记坑
问题现象 使用Appium操作真机时候,需要安装AppiumSettings软件,但是实际操作,一直提示安装失败,安装包异常 问题分析 [待定] 网上找到方式,都尝试过,无效 问题解决 取消开发者模式,USB连接手…...
ENSP-OSPF综合实验
AR4中通过ospf获取的其他区域路由信息,并且通过路由汇总后简化路由信息 实现全网通,以及单向重发布,以及通过缺省双向访问, 通过stub简化过滤四类五类lsa,简化ospf路由信息 通过nssa简化ospf信息 区域汇总简化R4路由信…...