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

C#基础 枚举 Enumeration从基础到进阶

目录

  • 一、入门篇:枚举基础
    • 1. 枚举类型的定义
    • 2. 枚举类型的优点
    • 3. 枚举的基本使用
      • 3.1 枚举的类型转换
      • 3.2 遍历枚举成员
      • 3.3 判断枚举值是否有效
      • 3.4枚举的比较
    • 4. 枚举的设计规范
  • 二、深入底层篇:存储、值与继承限制
    • 1. 枚举的存储与表示
    • 2. 枚举底层类型选择原则
    • 3. 枚举的继承与限制
  • 三、进阶使用篇
    • 1. 标志 (Flags )枚举位运算
    • 2. 枚举的泛型方法
    • 3. 枚举的自定义属性
    • 4. 枚举的扩展方法
  • 四、总结
  • 参考文档

一、入门篇:枚举基础

1. 枚举类型的定义

枚举(Enumeration)由一组命名常量(称为枚举器)组成,用于建立一系列相互关联的整数常量,通过为这些常量分配描述性名称来增强代码的可读性和可管理性。

  • 语法enum 枚举名 { 成员名称 = 整数值, 其他成员名称, ... }
  • 要点
    • 枚举成员之间用","隔开。
    • 枚举类型可以继承 bytesbyteshortushortintuintlongulong 类型。
    • 第一个枚举成员如果没有显式设定值,则默认值为0,后续成员依次加1。
    • 指定值:也可以为枚举成员指定特定的值。
      • 如果枚举的第一个成员没有显式赋值,则其默认值为0,后续成员依次递增。
      • 如果后续某个成员显式赋值,则从这个成员开始,后续成员的值在其基础上依次递增。
// 定义一个名为Weekday的枚举类型,继承自int类型
enum Weekday : int {// 枚举成员之间用逗号隔开Monday = 1, // 显式设定值为1Tuesday,    // 没有显式设定值,自动加1,值为2Wednesday,  // 自动加1,值为3Thursday,   // 自动加1,值为4Friday,     // 自动加1,值为5Saturday,   // 自动加1,值为6Sunday      // 自动加1,值为7
}
enum StatusCode { Success = 200, NotFound = 404, InternalServerError = 500 }// 如果枚举的第一个成员没有显式赋值,则其默认值为0,后续成员依次递增
enum DefaultEnum1 { First, Second, Third }
// 如果后续某个成员显式赋值,则从这个成员开始,后续成员的值在其基础上依次递增
enum DefaultEnum2 { First, Second = 10, Third }Console.WriteLine($"DefaultEnum1.First的值:{(int)DefaultEnum1.First}");   // 0
Console.WriteLine($"DefaultEnum1.Second的值:{(int)DefaultEnum1.Second}"); // 1
Console.WriteLine($"DefaultEnum1.Third的值:{(int)DefaultEnum1.Third}");   // 2Console.WriteLine($"DefaultEnum2.First的值:{(int)DefaultEnum2.First}");   // 0
Console.WriteLine($"DefaultEnum2.Second的值:{(int)DefaultEnum2.Second}"); // 10
Console.WriteLine($"DefaultEnum2.Third的值:{(int)DefaultEnum2.Third}");   // 11

2. 枚举类型的优点

  • 资源占用少:枚举是在栈中建立的数值类型,相比堆中建立的数据类型,运行程序时需要更少的处理器和内存资源,有助于提高程序的运行效率,降低系统资源的消耗。
  • 性能高:枚举类型实质上是整数类型的别名,具有与整数相同的性能特征,这意味着在进行各种运算和操作时,枚举类型能够像整数一样快速高效地执行,不会因类型转换等因素而产生额外的性能开销。
  • 代码可读性强:枚举类型为处理一组相关的常数提供了一种清晰的方式,通过为常数赋予具有明确意义的名称,使得代码更加直观易懂,其他开发者阅读代码时能够更快地理解代码的意图和逻辑,便于后续的代码维护和扩展。
  • 类型安全:使用枚举类型可以确保在代码中处理的常数值是预定义好的枚举成员之一,避免了使用普通的整数常量时可能出现的错误赋值或传递非法值的情况,从而提高了代码的健壮性和可靠性,减少潜在的运行时错误。

3. 枚举的基本使用

3.1 枚举的类型转换

  • 获取枚举成员的整数值(int)枚举.成员
    Weekday today = Weekday.Monday;
    int dayValue = (int)today; // dayValue的值是0int value = 4;
    Weekday day = (Weekday)value; // day的值是Weekday.Thursday
    
  • 字符串与枚举的相互转换
    • 获取枚举成员的字符串值枚举.成员.ToString()Enum.GetName(typeof(枚举名), 枚举值)
    • 字符串转枚举:Enum.Parse(typeof(枚举名), 字符串值)(枚举名)Enum.Parse(typeof(枚举名), 字符串值, true)(忽略大小写)。
    // 获取枚举成员的字符串值
    Weekday day = Weekday.Friday;
    string dayName = day.ToString(); // 使用ToString()方法
    Console.WriteLine("枚举成员的字符串值:" + dayName);string dayName2 = Enum.GetName(typeof(Weekday), day); // 使用Enum.GetName()方法
    Console.WriteLine("枚举成员的字符串值:" + dayName2);// 忽略大小写字符串转枚举
    string dayStringIgnoreCase = "saturday";
    Weekday parsedDayIgnoreCase =(Weekday)Enum.Parse(typeof(Weekday), dayStringIgnoreCase, true);
    Console.WriteLine("忽略大小写字符串转枚举:" + parsedDayIgnoreCase);

3.2 遍历枚举成员

使用 Enum.GetValues(typeof(枚举名)) 获取枚举的所有成员。

// 遍历枚举成员
Console.WriteLine("枚举的所有成员:");
foreach (Weekday weekday in Enum.GetValues(typeof(Weekday))) {Console.WriteLine(weekday);
}

3.3 判断枚举值是否有效

使用 Enum.IsDefined(typeof(枚举名), 值)

// 判断枚举值是否有效
int validValue = 5;    // 对应Weekday.Friday
int invalidValue = 10; // 无效的枚举值
Console.WriteLine("枚举值" + validValue + "是否有效:" +Enum.IsDefined(typeof(Weekday), validValue));
Console.WriteLine("枚举值" + invalidValue + "是否有效:" +Enum.IsDefined(typeof(Weekday), invalidValue));

3.4枚举的比较

  • 比较枚举值:可以直接使用比较运算符(如==!=<>等)比较两个枚举值的大小,比较的是枚举成员的整数值。
  • 比较枚举成员名称:如果需要比较枚举成员的名称字符串,可以先将枚举值转换为字符串,然后使用字符串的比较方法(如String.EqualsString.Compare等)进行比较。
// 定义一个枚举
enum Sex { 男 = 1, 女 = 2 } 
// 比较枚举值
Sex sex1 = Sex.男;
Sex sex2 = Sex.女;
Console.WriteLine(sex1 == sex2); // false
Console.WriteLine(sex1 != sex2); // true
Console.WriteLine(sex1 > sex2);  // false
Console.WriteLine(sex1 < sex2);  // true// 比较枚举成员名称
string sex1Name = sex1.ToString();
string sex2Name = sex2.ToString();
Console.WriteLine(String.Equals(sex1Name, sex2Name));       // false
Console.WriteLine(String.Compare(sex1Name, sex2Name) == 0); // false
Console.WriteLine(String.Compare(sex1Name, sex2Name) < 0);  // true
Console.WriteLine(String.Compare(sex1Name, sex2Name) > 0);  // false

4. 枚举的设计规范

  • 命名:简单枚举的命名采用单数形式,不要使用 EnumFlagFlags 作为枚举类型的后缀。
  • 零值枚举元素:考虑显式定义零值枚举元素,以防止未初始化的枚举值导致的意外行为。
  • 返回空实例:方法或属性返回枚举时,宁可返回一个空实例(如 Enum.GetValues(typeof(枚举名))[0])也不要返回空值(null),以提高代码的健壮性。

二、深入底层篇:存储、值与继承限制

1. 枚举的存储与表示

  • 枚举在底层是通过整数来存储的,每个枚举成员对应一个整数值。
  • 枚举类型的变量在内存中占用的空间取决于其基础类型(如 intbyte 等)。
    • 为什么要指定枚举值的底层类型

      指定枚举值的底层类型的目的是为了节省内存空间,或者适应特定的数据源。不同的整数类型占用的内存空间和取值范围不同,如下表所示:

      类型内存空间取值范围
      byte1 字节0 到 255
      sbyte1 字节-128 到 127
      short2 字节-32768 到 32767
      ushort2 字节0 到 65535
      int4 字节-2147483648 到 2147483647
      uint4 字节0 到 4294967295
      long8 字节-9223372036854775808 到 9223372036854775807
      ulong8 字节0 到 18446744073709551615

2. 枚举底层类型选择原则

  1. 根据成员数量和值大小选择:当枚举值的成员数量较少且数值较小时,应优先选用较小的整数类型作为底层类型,以节省内存空间并提升性能。

    例如,若枚举值仅有四个成员,可选用 byte 作为底层类型,相较于使用 int,可节省 3 个字节的内存空间。

  2. 依据数据源特性选择:若枚举值需与特定数据源(如数据库、文件或网络)相适配,则应选用与数据源相同或兼容的整数类型作为底层类型,以避免类型转换带来的错误或额外开销。

    例如,当数据源为 16 位无符号整数时,宜选用 ushort 作为底层类型,而非 int,这样可确保数据的一致性和准确性。

3. 枚举的继承与限制

  • 枚举不能继承自除基本整数类型以外的其他类型。
  • 枚举成员的值必须在其基础类型的范围内。
using System;
using System.Runtime.InteropServices;// 获取枚举类型的大小
int WeekdayenumSize = sizeof(Weekday);
Console.WriteLine("Weekday枚举类型占用的内存空间大小:" + WeekdayenumSize + " 字节");// 定义一个继承自byte类型的枚举
enum Color : byte { Red, Green, Blue }
// 获取枚举类型的大小
int enumSize = sizeof(Color);
Console.WriteLine("枚举类型占用的内存空间大小:" + enumSize + " 字节");// 获取byte类型的大小
int byteSize = sizeof(byte);
Console.WriteLine("byte类型占用的内存空间大小:" + byteSize + " 字节");// 比较枚举类型和byte类型占用的内存空间大小
if (enumSize == byteSize) {Console.WriteLine("继承自byte类型的枚举占用的内存空间与byte类型相同");
} else {Console.WriteLine("继承自byte类型的枚举占用的内存空间与byte类型不同");
}
Weekday枚举类型占用的内存空间大小:4 字节
枚举类型占用的内存空间大小:1 字节
byte类型占用的内存空间大小:1 字节
继承自byte类型的枚举占用的内存空间与byte类型相同

三、进阶使用篇

1. 标志 (Flags )枚举位运算

PS:可查看我的另一篇文章查看关于位运算更多内容。

位运算始末 |详解、特性思考、示例、运算巧思、相关算法、实际应用 (以C#为例)_c#归零-CSDN博客

  • 定义:通过给枚举加上 [Flags] 特性,使其能够表示多个枚举值的组合。
  • 赋值:枚举成员的值通常定义为2的幂(如1, 2, 4, 8等),以便进行位运算。
  • 使用
    • 组合枚举值:使用位或运算符 |
    • 检查是否包含某个枚举值:使用位与运算符 & 和比较运算符 ==
    • 去除某个枚举值:使用位异或运算符 ^
// 定义一个简单的枚举
public enum Sex { 女 = 0, 男 = 1 }// 定义一个标志枚举
[Flags]
public enum Role {未分配 = 0,删除数据 = 1,修改数据 = 2,新增数据 = 4,查看数据 = 8
}// 获取枚举成员的字符串值和整数值
string sexString = Sex.男.ToString();
int sexValue = (int)Sex.男;// 组合枚举值
Role userRole = Role.删除数据 | Role.修改数据;// 检查是否包含某个枚举值
bool hasDeletePermission = (userRole & Role.删除数据) == Role.删除数据;// 输出结果
Console.WriteLine($"Sex: {sexString}, Value: {sexValue}");
Console.WriteLine($"User Role: {userRole}, Has Delete Permission: {hasDeletePermission}");
Sex: 男, Value: 1
User Role: 删除数据, 修改数据, Has Delete Permission: True

2. 枚举的泛型方法

可以编写泛型方法来处理不同类型的枚举。例如:

public static T GetEnumValue<T>(int value) where T : struct, Enum
{return (T)Enum.ToObject(typeof(T), value);
}Weekday day = GetEnumValue<Weekday>(3); // day的值是Weekday.Wednesday

在这个例子中,GetEnumValue方法接受一个整数值和一个枚举类型作为参数,返回对应的枚举值。通过泛型方法,可以处理不同类型的枚举,提高代码的复用性.

3. 枚举的自定义属性

可以为枚举成员添加自定义属性,以存储额外的信息。这可以通过扩展方法来实现。

可以为枚举成员添加属性,以便存储额外的信息。例如:

enum ErrorCode
{[Description("无效输入")]InvalidInput,[Description("超时")]Timeout,[Description("连接失败")]ConnectionFailed
}

在这个例子中,为ErrorCode枚举的每个成员添加了Description属性,用于存储错误代码的描述信息。可以通过反射来获取这些属性的值,例如:

ErrorCode error = ErrorCode.InvalidInput;
var description = typeof(ErrorCode).GetField(error.ToString()).GetCustomAttribute<DescriptionAttribute>()?.Description;Console.WriteLine(description); // 输出: 无效输入

4. 枚举的扩展方法

可以为枚举类型定义扩展方法,以便扩展枚举的功能。例如:

public static class WeekdayExtensions
{public static bool IsWeekend(this Weekday day){return day == Weekday.Saturday || day == Weekday.Sunday;}
}Weekday today = Weekday.Saturday;
bool isWeekend = today.IsWeekend(); // true

在这个例子中,为Weekday枚举定义了一个扩展方法IsWeekend,用于判断一个工作日是否是周末.

四、总结

  1. 枚举基础
    • 枚举定义:一种数据类型,定义一组命名常量,提升代码可读性和可维护性。
    • 语法要点:enum 枚举名 { 成员名称 = 整数值, 其他成员名称, ... },成员间逗号隔开,可继承多种整数类型。
    • 枚举优点:在栈中建立,占用资源少;增强代码可读性和可维护性。
    • 基本使用:包括类型转换(获取整数值、字符串值,字符串转枚举)、遍历成员(Enum.GetValues(typeof(枚举名)))、判断有效性(Enum.IsDefined(typeof(枚举名), 值))。
    • 设计规范:命名单数形式;定义零值枚举元素;返回空实例非空值。
  2. 枚举的存储、值与继承限制
    • 存储表示:底层整数存储,变量占用空间依基础类型定。指定底层类型可节省内存或适配数据源。
    • 继承限制:不能继承除基本整数类型外的其他类型,成员值须在基础类型范围内。
  3. 枚举的进阶使用
    • 比较:可直接比较枚举值大小,也可比较成员名称字符串。
    • 标志枚举与位运算:[Flags]特性定义,成员值为2的幂,可组合、检查和去除枚举值。
    • 泛型方法:编写泛型方法处理不同类型枚举,提高代码复用性。
    • 自定义属性:为成员添加属性存储额外信息,可通过反射获取。
    • 扩展方法:定义扩展方法扩展枚举功能,如判断工作日是否为周末。

参考文档

  1. 在 C# 中实现枚举的最佳使用_c# 枚举-CSDN博客
  2. 枚举类型 - C# reference | Microsoft Learn

相关文章:

C#基础 枚举 Enumeration从基础到进阶

目录 一、入门篇&#xff1a;枚举基础1. 枚举类型的定义2. 枚举类型的优点3. 枚举的基本使用3.1 枚举的类型转换3.2 遍历枚举成员3.3 判断枚举值是否有效3.4枚举的比较 4. 枚举的设计规范 二、深入底层篇&#xff1a;存储、值与继承限制1. 枚举的存储与表示2. 枚举底层类型选择…...

SOME/IP 协议详解——服务发现

文章目录 1. Introduction &#xff08;引言&#xff09;2. SOME/IP Service Discovery (SOME/IP-SD)2.1 General&#xff08;概述)2.2 SOME/IP-SD Message Format2.2.1 通用要求2.2.2 SOME/IP-SD Header2.2.3 Entry Format2.2.4 Options Format2.2.4.1 配置选项&#xff08;Co…...

android studio使用DataBinding

DataBinding 是谷歌官方发布的在android上对MVVM设计模式的一个实现框架&#xff0c;其作用是实现数据绑定。 Android DataBinding主要实现了View和ViewModel的双向绑定&#xff0c;包括用户的响应。并且实现了自动更新。 DataBinding优点&#xff1a; 1.大量减少Act…...

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔&#xff0c;就想加入一种数据序列化方式&#xff0c;json、xml简单好用&#xff0c;但我就是不想用&#xff0c;于是就想到了protobuf&#xff0c;对于protobuf C/C的使用个人感觉有点重&#xff0c;正好…...

JavaSE面试

final和static对比 static知识点介绍static代码块当JVM加载类时&#xff0c;static代码块会且只会被执行一次。可用于优化程序性能。实例代码块在每次创建对象时&#xff0c;都会自动执行。static方法static方法中不能使用this和super关键字。静态内部类静态内部类的创建不需要…...

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.10.1. 什么是集成测试 在Rust里&#xff0c;集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样&#xff0c;这也…...

Redis :redis的大Key问题

问题 &#xff1a; 什么是redis 的大key 呢&#xff1f; redis 是一个单线程应用程序。他的请求类似于队列处理&#xff0c;命令排队执行&#xff0c;逐个处理。 这样就会出现一个问题&#xff0c;一旦队列前面的命令请求处理时间过程&#xff0c;那么后续执行命令就会被迫的等…...

IntelliJ IDEA中Maven项目的配置、创建与导入全攻略

大家好&#xff0c;我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE&#xff08;集成开发环境&#xff09;之一&#xff0c;也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能&#xff0c;通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…...

如何确保获取的淘宝详情页数据的准确性和时效性?

要确保获取的淘宝详情页数据的准确性和时效性&#xff0c;可从以下几个方面着手&#xff1a; 合法合规获取数据 遵守平台规则&#xff1a;在获取淘宝详情页数据之前&#xff0c;务必仔细阅读并严格遵守淘宝平台的使用协议和相关规定。明确哪些数据可以获取、以何种方式获取以及…...

如何将json字符串格式化

文章目录 如何对json字符串进行格式化显示hutool方案的示例和不足使用fastjson的方案 如何对json字符串进行格式化显示 将json字符串内容进行格式化的输出显示。本文介绍 hutool的方案和alibaba 的fastjson方案 hutool方案的示例和不足 引入依赖 <dependency><grou…...

【Vue + Antv X6】可拖拽流程图组件

使用事项&#xff1a; ❗先放个组件上来&#xff0c;使用手册有空会补全 ❗需要下载依赖 “antv/x6”: “^2.18.1”, “antv/x6-plugin-dnd”: “^2.1.1”, 组件&#xff1a; 组件使用&#xff1a; <flowChart :key"flowChartKey" ref"flowChart" lef…...

反转链表题目

文章目录 反转链表题目链接&#xff1a;[在线OJ](https://leetcode.cn/problems/reverse-linked-list/description/)题目详解思路1&#xff1a;思路1算法复杂度 思路2代码实现思路2算法复杂度 结语 欢迎大家来到我的博客&#xff0c;给生活来点impetus 让我们进入《题海探骊》…...

利用Python爬虫获取义乌购店铺所有商品列表:技术探索与实践

在当今数字化时代&#xff0c;数据的重要性不言而喻。对于采购商而言&#xff0c;能够快速、准确地获取供应商店铺内的所有商品信息&#xff0c;是提升采购效率、优化采购决策的关键。义乌购作为国内知名的在线批发平台&#xff0c;汇聚了海量的商品资源&#xff0c;为采购商提…...

基于FPGA的多功能数字钟设计

基于FPGA的多功能数字钟设计 前言基础知识按键数码管 系统概述按键使用说明模块描述模块设计button_debouncebutton_controllerclock_controllerdigital_tube 整体资源用量测试视频 前言 本工程主要是数码管、按键、LED的应用开发。 注&#xff1a;本工程所有IP均使用源码开发…...

nginx-lua模块安装

一.简述 安装 Nginx 的 Lua 模块&#xff08;通常指的是 ngx_lua 模块&#xff09;可以显著增强 Nginx 的功能&#xff0c;使其能够执行 Lua 脚本。这使得 Nginx 可以处理更复杂的逻辑和动态内容生成。以下是详细的安装步骤&#xff0c;包括安装 OpenResty 或从源码编译 Nginx…...

poi处理多选框进行勾选操作下载word以及多word文件压缩

一、场景 将数据导出word后且实现动态勾选复选框操作 eg: word模板 导出后效果&#xff08;根据数据动态勾选复选框&#xff09; 二、解决方案及涉及技术 ① 使用poi提供的库进行处理&#xff08;poi官方文档&#xff09; ② 涉及依赖 <!-- excel工具 --><depen…...

centos7.3安装部署freeswitch

centos7.3安装部署freeswitch 切换yum源为阿里镜像源安装 FreeSWITCH 的 YUM 软件仓库配置文件和 EPEL安装相关工具安装cmake源码编译安装依赖安装 freeswitch 切换yum源为阿里镜像源 cp -r /etc/yum.repos.d /etc/yum.repos.d.bakcurl -o /etc/yum.repos.d/CentOS-Base.repo …...

C# 迭代,递归,回调--13

目录 一.迭代 迭代器示例: 关键点: 优势: 二.递归 递归示例: 关键点: 优势: 注意: 三.回调 回调示例: 关键点: 优势: 应用场景: 4.三种模式的特点对比: 迭代: 递归: 回调: 一.迭代 在C#中迭代通常指重复执行一系列指令 在C#中,迭代器是一种特殊的结构,允许…...

MOS管为什么会有夹断,夹断后为什么会有电流?该电流为什么是恒定的?

以下是对MOS管MOS管为什么会有夹断&#xff0c;夹断后为什么还会有电流&#xff1f;该电流为什么是恒定的&#xff1f;的一些心得体会。 1. MOS管为什么会有夹断&#xff1f; 可以认为D极加压使得D极的耗尽层增大(原因是N极接正极&#xff0c;P极接负极&#xff0c;电子被吸引…...

3D可视化产品定制,应用于哪些行业领域?

3D可视化定制服务已广泛渗透至众多行业领域&#xff0c;包括汽车、家居、时尚鞋服、珠宝配饰以及数码电器等&#xff1a; 汽车行业&#xff1a; 借助Web全景技术与3D模型&#xff0c;我们高保真地再现了汽车外观&#xff0c;为用户带来沉浸式的车型浏览体验。用户可在展示界面自…...

Golang 简要概述

文章目录 1. Golang 的学习方向2. Golang 的应用领域2.1 区块链的应用开发2.2 后台的服务应用2.3 云计算/云服务后台应用 1. Golang 的学习方向 Go 语言&#xff0c;我们可以简单的写成 Golang 2. Golang 的应用领域 2.1 区块链的应用开发 2.2 后台的服务应用 2.3 云计算/云服…...

PL/SQL语言的文件操作

PL/SQL语言的文件操作 PL/SQL&#xff08;Procedural Language/SQL&#xff09;是Oracle公司开发的一种过程化扩展SQL的语言&#xff0c;广泛应用于Oracle数据库的开发和管理。PL/SQL不仅支持SQL指令&#xff0c;还支持过程化编程&#xff0c;例如条件控制、循环控制、异常处理…...

python判断当前时间是否是每月10号上午

以下是一个 Python 脚本&#xff0c;用于判断当前时间是否是每月 10 号的上午&#xff1a; from datetime import datetime# 获取当前时间 now datetime.now()# 检查是否是每月 10 号的上午 if now.day 10 and now.hour < 12:print("当前时间是每月10号上午。"…...

【MT32F006】MT32F006之max17048电量计(IIC通信)

本文最后修改时间&#xff1a;2025年01月09日 一、本节简介 本文介绍如何使用MT32F006通过IIC与电量计max17048通信。 二、实验平台 库版本&#xff1a;V1.0.0 编译软件&#xff1a;MDK5.37 硬件平台&#xff1a;MT32F006开发板&#xff08;主芯片MT32F006&#xff09; 仿…...

使用python生成gif图

使用PyCharm软件&#xff0c;然后pip install imageio 之后代码如下 import imageio.v2 as imageio# 合成 gif 方法 def compose_gif():img_path ["D:\\picture\\R-CA.jpg", "D:\\picture\\R-C.jpg","D:\\picture\\R-C.jpg", "D:\\pict…...

pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)

pytorch小记&#xff08;一&#xff09;&#xff1a;pytorch矩阵乘法&#xff1a;torch.matmul&#xff08;x, y&#xff09;/ x y 代码代码 1&#xff1a;torch.matmul(x, y)输入张量&#xff1a;计算逻辑&#xff1a;输出结果&#xff1a; 代码 2&#xff1a;y y.view(4,1)…...

CF 368A.Sereja and Coat Rack(Java实现)

问题分析 简而言之&#xff0c;小明要邀请m个绅士到家&#xff0c;家里有n个挂衣钩&#xff0c;一个挂衣钩要支付i元&#xff0c;如果挂衣钩不够了就要给每个绅士赔d元 思路分析 所以思路就很清楚了&#xff0c;获取n&#xff0c;d&#xff0c;m的值&#xff0c;并用数组存放每…...

HBuilderX打包ios保姆式教程

1、登录苹果开发者后台并登录已认证开发者账号ID Sign In - Apple 2、创建标识符&#xff08;App ID&#xff09;、证书&#xff0c;描述文件 3、首先创建标识符&#xff0c;用于新建App应用 3-1、App的话直接选择第一个App IDs&#xff0c;点击右上角继续 3-2、选择App&#x…...

【SOC 芯片设计 DFT 学习专栏 -- DFT 接管 clock 和 reset】

文章目录 OverviewDFT 接管 Clock 和 Reset 的方法Clock 接管方法Reset 接管方法 什么场景下需要 DFT 来接管 Clock 和 Reset&#xff1f;制造测试&#xff08;Manufacturing Test&#xff09;静态路径扫描测试&#xff08;Scan Testing&#xff09;调试与故障定位&#xff08;…...

浅谈云计算07 | 云安全机制

浅谈云计算安全机制&#xff1a;全方位守护云端世界 一、引言二、加密技术&#xff1a;数据的隐形护盾三、散列机制&#xff1a;数据完整性的忠诚卫士四、数字签名&#xff1a;数据来源与真伪的鉴定专家五、公钥基础设施&#xff08;PKI&#xff09;&#xff1a;信任的基石六、…...

PyTorch 深度学习框架快速入门 (小土堆)

PyTorch 深度学习框架快速入门 深度学习框架常用模块数据集存取图片数据处理库 —— PILOS 模块实例 Tensorboard 记录机器学习的过程Transform 进行图像变换数据集的下载DataLoaderModule 自定义网络前向传播卷积层卷积简单应用 最大池化非线性层线性层 简单的整合基于现有网络…...

React Native Hooks开发指南

一、什么是Hooks Hooks 是 React 16.8 的新增特性。在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 是一种在函数式组件中使用有状态函数的方法。 二、类组件 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 三、常用…...

Java内存与缓存

Java内存管理和缓存机制是构建高性能应用程序的关键要素。它们之间既有联系又有区别&#xff0c;理解这两者对于优化Java应用至关重要。 Java 内存模型 Java内存模型&#xff08;JMM&#xff09;定义了线程如何以及何时可以看到其他线程修改过的共享变量的值&#xff0c;并且规…...

两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库

目录 分析问题的原因解决 分析问题的原因 在git push的时候莫名遇到这种情况 若你在git上修改了如README.md的文件。由于本地是没有README.md文件的&#xff0c;所以导致 远端仓库git和本地不同步。 将远端、本地进行合并就可以很好的解决这个问题 注意&#xff1a;直接git pu…...

React中ElementFiber对象、WorkInProgress双缓存、ReconcileRenderCommit、第一次挂载过程详解

基础概念 Element对象与Fiber对象 Element对象与Fiber对象 Element 对象 定义 React 的 Element 对象是一个描述用户界面&#xff08;UI&#xff09;的普通 JavaScript 对象&#xff0c;通常由 React.createElement 或 JSX 语法生成。 作用 它是 React 应用中的一种描述 …...

【论文阅读】Workload Dependent Performance Evaluation of the Linux 2.6 I/O Schedulers

文章目录 某些背景知识的科普&#xff08;依赖GPT&#xff09;GPT简短总结摘要-Abstract引言-Introduction1 I/O Scheduling and the BIO LayerThe 2.6 Deadline I/O Scheduler2.1 The 2.6 Anticipatory I/O scheduler2.2 The 2.6 CFQ Scheduler2.3 The 2.6 noop I/O scheduler…...

macOS 版本对应 Xcode 版本,以及 Xcode 历史版本下载

注&#xff1a;当前页面的所有Xcode下载链接均为苹果官方下载链接 &#xff0c;点击将直接转至苹果官网下载。❤️❤️❤️ Xcode官网&#xff1a;Xcode Releases | xcodereleases.com Xcode版本Xcode发布时间对应macOS版本macOS SDKsiOS SDKswatchOS SDKstvOS SDKs下载Xcode发…...

量子计算:从薛定谔的猫到你的生活

文章背景 说到量子计算&#xff0c;不少人觉得它神秘又遥不可及。其实&#xff0c;它只是量子物理学的一个“应用小分支”。它的核心在于量子比特的“叠加”和“纠缠”&#xff0c;这些听上去像科幻小说的概念&#xff0c;却为计算世界开辟了一片全新的天地。如果经典计算是“…...

R4-LSTM学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-火灾温度预测 导入数据数据可视化设置X、y构建模型调用模型个人总结LSTM 的基本结构细胞状态&#xff08;Cell State&#xff09;LSTM 的优点 导入数据 i…...

Facebook 隐私变革之路:回顾与展望

在数字时代&#xff0c;个人隐私的保护一直是社交平台面临的重大挑战之一。作为全球最大的社交网络平台&#xff0c;Facebook&#xff08;现为Meta&#xff09;在处理用户隐私方面的变革&#xff0c;历经了多次调整与完善。本文将回顾Facebook在隐私保护方面的历程&#xff0c;…...

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…...

LabVIEW驱动电机实现样品自动搜索

利用LabVIEW控制电机驱动相机在XY平面上进行扫描&#xff0c;以检测样品位置。样品最初可能位于相机视野范围之外&#xff0c;需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点&#xff1a; 高效搜索&#xff1a;能够快速确定样品位置&#xff0c;缩短…...

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…...

计算机网络 笔记 网络层1

网络层功能概述 主要的任务是把分组从源端传输到目的端&#xff0c;为分组交换网上的不同主句提供通信服务&#xff0c;网络层的传输单位是数据报。 主要的功能&#xff1b; 1&#xff0c;路由选择&#xff1a;路由选择指网络层根据特定算法&#xff0c;为数据包从源节点到目…...

推理规则库的构建与应用

目录 前言1. 推理规则库概述1.1 推理规则的基本构成1.2 推理规则库的作用与意义 2. 推理规则库的构建2.1 知识获取与表示2.2 推理规则的提取2.3 规则的优化与整合 3. 推理规则库的推理机制3.1 前向推理3.2 后向推理3.3 混合推理 4. 推理规则库的应用4.1 医学领域4.2 金融领域4.…...

深度学习|表示学习|一个神经元可以干什么|02

如是我闻&#xff1a; 如果我们只有一个神经元&#xff08;即一个单一的线性或非线性函数&#xff09;&#xff0c;仍然可以完成一些简单的任务。以下是一个神经元可以实现的功能和应用&#xff1a; 1. 实现简单的线性分类 输入&#xff1a;一组特征向量 x x x 输出&#xff…...

2 XDMA IP中断

三种中断 1. Legacy 定义&#xff1a;Legacy 中断是传统的中断处理方式&#xff0c;使用物理中断线&#xff08;例如 IRQ&#xff09;来传递中断信号。缺点&#xff1a; 中断线数量有限&#xff0c;通常为 16 条&#xff0c;限制了可连接设备的数量。中断处理可能会导致中断风…...

什么是负载均衡?NGINX是如何实现负载均衡的?

大家好&#xff0c;我是锋哥。今天分享关于【什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…...

AWS简介

AWS 一&#xff0c;AWS是什么&#xff1f; AWS的全称是 Amazon Web Services 的缩写&#xff0c;是亚马逊公司提供的一套广泛且应用广泛的云端服务。 AWS提供了超过200项全功能的服务&#xff0c;来自数据中心数据中心遍布全球多个地理位置&#xff0c;这些服务包括计算能力&…...

旅游网站设计与实现

文末附有完整项目代码 在当今数字化时代&#xff0c;旅游网站成为人们获取旅游信息的重要途径。本文将详细介绍旅游网站的设计与实现&#xff0c;让你轻松了解其中的技术奥秘&#xff01; 一、项目背景 随着社会经济的发展&#xff0c;人们对精神消费愈发重视&#xff0c;旅游…...