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

民办生从零学C的第十一天:操作符

每日励志:我们可以随时的转身,但是决不能后退。

一.操作符的分类

  • 算术操作符+-*/%

  • 移位操作符:<<>>

  • 位操作符:&|^

  • 赋值操作符:=+=-=*=/=%=<<=>>=&=|=^=

  • 单目操作符:!++--&*+-~sizeof(类型)

  • 关系操作符:>>=<<===!=

  • 逻辑操作符:&&||

  • 条件操作符:?:

  • 逗号表达式:,

  • 下标引用:[]

  • 函数调用:()

  • 结构成员访问:.->

二.二进制与进制转换

1.二进制

二进制是计算机中数据存储和运算的基础,它只有两个数字:01。二进制的每一位代表一个幂次的 2。

eg 二进制数1011可以表示为:

1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11

2.进制转换

a. 十进制转二进制

将十进制数转换为二进制数,可以采用“除以 2 取余法”。具体步骤如下:

  1. 将十进制数除以 2,得到商和余数。

  2. 将商继续除以 2,直到商为 0。

  3. 将每次得到的余数倒序排列,即为二进制数。

示例:将十进制数 11 转换为二进制。

11 ÷ 2 = 5 余 1
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1

所以余数倒序排列可得:1011

b.二进制转八进制

8进制的数字每一位是0~7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了。

从右到左将二进制数每3位分为一组不足3位的在前面补0,然后将每组二进制数转换为对应的八进制数。

八进制表示的时候在前面加 0

eg 将二进制数10110101转换为八进制。

  1. 分组:从右到左每3位分为一组。

    10110101 → 10 110 101
    • 第一组:101(右边第一组,3位)

    • 第二组:110(中间一组,3位)

    • 第三组:10(左边最后一组,不足3位,在前面补0 → 010

  2. 转换每组

    • 0102(因为 0×2² + 1×2¹ + 0×2⁰ = 0 + 2 + 0 = 2

    • 1106(因为 1×2² + 1×2¹ + 0×2⁰ = 4 + 2 + 0 = 6

    • 1015(因为 1×2² + 0×2¹ + 1×2⁰ = 4 + 0 + 1 = 5

  3. 组合结果0265

c.二进制转十六进制

16进制的数字每一位是0~9,a~f 的,0~9 , a~f 的数字,各自写成2进制,最多有4个2进制位就足够了,

从右到左将二进制数每4位分为一组,不足4位的在前面补0。 将每组二进制数转换为对应的十六进制数。

16进制表示的时候前面加0x

十进制数字      1  2  3  4  5  6  7  8  9  10  11   12  13  14  15  16

十六进制数字  1  2  3  4  5  6  7  8  9   a     b     c    d    e    f    g

eg 将二进制数10110101转换为十六进制。

  1. 分组:从右到左每4位分为一组。

    10110101 → 1011 0101
  2. 转换每组

    • 1011B(因为 11 = 8 + 2 + 1 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰

    • 01015(因为 5 = 4 + 1 = 0×2³ + 1×2² + 0×2¹ + 1×2⁰

  3. 组合结果0xB5

三.原码 反码 补码 

它们是整数二进制的表示方法,高位是符号位,其余位表示数值。

正数:符号位为0,其余位为数值的二进制表示。 负数:符号位为1,其余位为数值的二进制表示。

1.原码

直接将数值按照正负数的形式翻译成二进制得到的就是原码。

eg

  • 二进制数0101(即十进制的5)的32位原码是:

    00000000000000000000000000000101
  • 二进制数1101(即十进制的-5)的32位原码是:

    10000000000000000000000000000101

2.反码

将原码的符号位不变,其他位依次按位取反就可以得到反码,它是对原码的改进,用于简化减法运算。

正数的反码等于它的原码,反码实际上是为负数服务的

eg

  • 二进制数0101(即十进制的5)的32位反码是:

    00000000000000000000000000000101
  • 二进制数1101(即十进制的-5)的32位原码是:

    10000000000000000000000000000101

    其反码是:

    11111111111111111111111111111010

3.补码

反码(二进制)+1就得到补码,主要用于简化加减法运算,并且解决了原码和反码中存在的+0-0的问题。

正数的补码等于它的原码,补码也是为负数服务的

整数在内存中存储的是2进制的补码

在原码和反码的表示方法中,存在两个不同的表示形式来表示零,即正零(+0)和负零(-0)。这可能会导致一些混淆和问题,因为正零和负零在数值上是相等的,但在表示上却不同。补码解决了这个问题,使得零只有一个表示形式

原码和反码中的+0和-0(用八位二进制进行解释)

  • 原码中的零

    • 正零:00000000

    • 负零:10000000

  • 反码中的零

    • 正零:00000000

    • 负零:11111111

在原码和反码中,正零和负零是不同的表示形式,这可能会导致一些问题,比如在比较两个数是否相等时需要额外的处理。但在补码表示中,零只有一个表示形式,即 00000000。这是因为补码的定义消除了正零和负零的区别

按照补码的定义,负零的补码应该是反码加1。负零的原码是10000000,反码是11111111,反码加1后得到00000000(因为11111111 + 1 = 100000000,但(如果最高位有进位,则溢出位被丢弃)溢出的位被丢弃。

因此,在补码表示中,正零和负零都表示为00000000,从而消除了+0和-0的问题。

eg

  • 二进制数0101(即十进制的5)的32位补码是:

    00000000000000000000000000000101
  • 二进制数1101(即十进制的-5)的32位原码是:

    10000000000000000000000000000101

    其反码是:

    11111111111111111111111111111010

    补码是:

    11111111111111111111111111111011

4.转换

  • 原码转反码:正数不变,负数的数值位取反。

  • 反码转补码:正数不变,负数的反码加1。

  • 补码转原码:正数不变,负数的补码减1得到反码,再取反得到原码。

正数5
  • 原码00000000000000000000000000000101

  • 反码00000000000000000000000000000101

  • 补码00000000000000000000000000000101

负数-5
  • 原码10000000000000000000000000000101

  • 反码11111111111111111111111111111010

  • 补码11111111111111111111111111111011

5.计算

a.原码与原码的计算

需要单独处理符号位,符号位不会直接参与数值的加法运算,也不会因为数值位的进位而改变。

同号相加:

两个正数相加(符号位为0):直接相加,结果为正。

两个负数相加(符号位为1):直接相加,结果为负。

异号相加:

正数加负数(符号位由绝对值较大的数的符号决定):比较绝对值大小,绝对值大的数决定结果的符号。

eg

  • 5的原码00000000 00000000 00000000 00000101

  • 3的原码00000000 00000000 00000000 00000011

  • 结果是  :00000000 00000000 00000000   00001000

  • -5的原码10000000 00000000 00000000 00000101

  • -3的原码10000000 00000000 00000000 00000011

  •  结果是      10000000 00000000 00000000 00000110  原码表示的-8​​​

  • 5的原码: 00000000 00000000 00000000 00000101

  • -3的原码10000000 00000000 00000000 00000011

  • 结果是       00000000 00000000 00000000 00000010

b.补码与补码的计算

可以直接进行加减法运算,无需处理符号位,运算简单且高效。

  • 5的补码:  00000000 00000000 00000000 00000101

  • -3的补码: 11111111 11111111 11111111 11111101

  • 结果是        00000000 00000000 00000000 00000010 最高位的进位被丢弃

四.移位操作符

移动的是二进制数

1.左移操作符(<<)     

• 功能:将一个二进制数向左移动指定的位数。

• 数学意义:左移`n`位相当于将该数乘以 (2^n)。

• 原理:左移操作会在右侧补0,左侧溢出的位会被丢弃。

eg
 5 << 1:二进制 0101 左移1位变为 1010,即十进制的 10
 3 << 2:二进制 0011 左移2位变为 1100,即十进制的 12

2.右移操作符(>>) 

• 功能:将一个二进制数向右移动指定的位数。

• 数学意义:右移`n`位相当于将该数除以(2^n)(取整)。

• 原理:右移操作会丢弃右侧的位,左侧的空位用符号位填充(对于有符号数)或用0填充(对于无符号数)。

eg

8 >> 1:二进制 1000 右移1位变为 0100,即十进制的 4

10 >> 2:二进制 1010 右移2位变为 0010,即十进制的 2

移位规则:首先右移运算分两种:
1.逻辑右移:左边用0填充,右边丢弃
2.算术右移:左边用原该值的符号位填充,右边丢弃

右移到底采用算术右移还是逻辑右移是取决于编译器的,通常采用的都是算术右移

对于移位运算符,不要移动负数位,这个是标准未定义的。

五.位操作符 (& | ^ ~)

作用于补码表示的数值

1. 按位与(&)

两个操作数的每一位进行运算。只有当两个位都为1时,结果才为1,否则为0

同1则1,有0为0) 常用于清零

int a = 5;    
// 32位补码:00000000 00000000 00000000 00000101
int b = 3;    
// 32位补码:00000000 00000000 00000000 00000011int result = a & b;
// 结果:    00000000 00000000 00000000 00000001 
//           1

补充: n = n & (n-1) 是一个常见的位运算技巧,用于清除整数 n 二进制表示中最右边的 1。

计算过程:

     110 (6)
&  101 (5)
     ------
     100 (4)

常用于统计二进制中 1 的个数或检查是否为 2 的幂次。

//统计二进制中 1 的个数int countOnes(int n) 
{int count = 0;while (n != 0) {count++;n = n & (n - 1); // 清除最右边的1}return count;
}
//检查是否为 2 的幂次int isPowerOfTwo(int n) {return n != 0 && (n & (n - 1)) == 0;
}

2. 按位或(|)

两个操作数的每一位进行运算。只要有一个位为1,结果就为1,否则为0。

有1则1,无1则0)常用于将指定位设置为1

int a = 5;    
// 32位补码:00000000 00000000 00000000 00000101
int b = 3;    
// 32位补码:00000000 00000000 00000000 00000011int result = a | b;
//     结果:00000000 00000000 00000000 00000111 //        7

3. 按位异或(^)

两个操作数的每一位进行异或运算。只有当两个位不同时,结果才为1,否则为0。

相异为1,相同为0

int a = 5;    
// 32位补码:00000000 00000000 00000000 00000101
int b = 3;   
// 32位补码:00000000 00000000 00000000 00000011int result = a ^ b;
// 结果:    00000000 00000000 00000000 00000110 
//         6

4. 按位取反(~)

对一个操作数的每一位取反。0变成1,1变成0。

int a = 5;    
// 32位补码:00000000 00000000 00000000 00000101int result = ~a;
// 结果:    11111111 11111111 11111111 11111010 
//       -6

注意,&,| 要与&&,||区别开,

前者关注二进制的计算,后者关注逻辑的真假

一道变态的面试题:
不能创建临时变量(第三个变量),实现两个整数的交换。

如果是可以创建变量的话,那很简单

#include <stdio.h>
int main()
{int a = 5;int b = 2;int c = 0;c = a;a = b;b = c;printf("a = %d\n",a);printf("b = %d\n",b);return 0;
}

但是题目要求不能创建变量,所以我们就必须从其他方向下手

1).加减法

#include <stdio.h>
int main()
{int a = 5;int b = 2;a = a + b; b = a - b;a = a - b;printf("a = %d\n",a);printf("b = %d\n",b);return 0;
}

2).使用异或法交换

补充:

异或运算基础

异或运算是一种位运算,符号为 ^ 。它的规则如下:

  • 0 ^ 0 = 0

  • 0 ^ 1 = 1

  • 1 ^ 0 = 1

  • 1 ^ 1 = 0

异或运算的两个重要性质:

  1. 一个数与自身异或结果为0:a ^ a = 0

  2. 一个数与0异或结果不变:a ^ 0 = a

#include <stdio.h>
int main()
{int a = 5;int b = 2;a = a ^ b;b = a ^ b;a = a ^ b;printf("a = %d\n",a);printf("b = %d\n",b);return 0 ;
}

一共有三种方法可以解决交换变量的问题,但在外面实际编程中,我们还是使用第一种创建变量的方法,因为它的可读性高,易理解。

六.单目操作符

1. 自增自减操作符

  ++

  -- 

2. 取地址操作符(&

用于获取变量的内存地址。

3. 间接访问操作符(*

用于访问指针变量所指向的内存地址中的值。

4. 正负号操作符(+ 和 -

用于对数值进行正负号的转换。

5. 逻辑非操作符(

用于对布尔值取反。

6. 求大小操作符(sizeof

用于计算数据类型或变量所占的字节数。

7. 按位非操作符(~

用于对数值的二进制表示取反(按位取反)。

七.逗号表达式

它使用逗号操作符( , )将多个表达式连接在一起,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

其基本形式为:表达式 1, 表达式 2, 表达式 3,..., 表达式 n。

//使用逗号表达式
#include <stdio.h>int main() 
{int a = 5, b = 10;printf("Sum: %d, Product: %d\n", a + b, a * b);return 0;
}
//不使用逗号表达式
#include <stdio.h>int main() 
{int a = 5;int b = 10;int sum = a + b;int product = a * b;printf("Sum: %d, Product: %d\n", sum, product);return 0;
}

八.下标访问 [ ] 、函数调用 ( ) 

1.下标访问操作符 [ ]

  • 下标访问操作符[]用于访问数组中的元素,其语法为  数组名  [索引]

  • 索引从0开始,表示元素在数组中的位置。

对于数组int arr[5] = {1, 2, 3, 4, 5};

  • arr[0]访问数组的第一个元素,值为1。

  • arr[2]访问数组的第三个元素,值为3。

 操作数:一个数组名 +一个索引值(下标)

2.函数调用操作符 ( )

  • 函数调用操作符()用于调用一个函数,其语法为  函数名(参数列表)。

  • 参数列表是传递给函数的值,用于函数内部的处理。

#include <stdio.h>int add(int a, int b) 
{return a + b;
}int main() 
{int result = add(3, 5);printf("Result: %d\n", result);return 0;
}

操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

九.结构成员访问操作符

C语言提供了多种内置类型供我们使用,例如 int,char,double等,但这些是不够用的,就例如我想描述一个学生,他的名字,他的年龄,他的性别,他的成绩等等,这个时候单一的内置类型就无法满足我们的使用。所以,C语言为了解决这个问题增加了结构体这种自定义的数据类型,让我们可以自己创造适合的类型。

1.结构体定义

使用struct关键字定义一个结构体

struct 结构体名 
{成员类型1 成员名1;成员类型2 成员名2;...成员类型n 成员名n;}变量列表;

相关文章:

民办生从零学C的第十一天:操作符

每日励志&#xff1a;我们可以随时的转身&#xff0c;但是决不能后退。 一.操作符的分类 算术操作符&#xff1a;、-、*、/、% 移位操作符&#xff1a;<<、>> 位操作符&#xff1a;&、|、^ 赋值操作符&#xff1a;、、-、*、/、%、<<、>>、&…...

疑难问题解决(2)

&#xff08;1&#xff09;&#xff1a;在k230开发板中&#xff0c;ubuntu操作系统中的文件夹中的k230_sdk文件夹与canmv_k230文件夹的区别&#xff0c;以及 /home/ubuntu/canmv_k230/src/rtsmart/rtsmart/userapps/07_driver_hello 与 /home/ubuntu/k230_sdk/src/big/rt-smart…...

第六章 进阶04 尊重

本周周会给大家讲的议题是&#xff1a;尊重。 用“尊重”给周报文件冠名&#xff0c;周会中打开这个文件&#xff0c;就可以在标题中醒目地看到&#xff0c;加深了大家的印象、勾起了大家的好奇心。坚持长期事项的同时&#xff0c;偶尔也灵光一现给团队管理加入一些小插曲&…...

Android 12.0 framework实现对系统语言切换的功能实现

1.前言 在12.0的系统rom定制化开发过程中,在定制某些接口的过程中,需要通过系统提供接口,然后实现对系统语言的切换 功能实现,接下来分析下系统中关于系统语言切换的相关功能 2.framework实现对系统语言切换的功能实现的核心类 frameworks/base/core/java/android/app/IA…...

Origin LabTalk

之前用惯了matplotlib绘图&#xff0c;出于科研需要部分图用origin来画&#xff0c;但是还是想着要结合python来处理数据更加的方便&#xff0c;经过一番捣鼓发现origin自带有labtalk,并且还带有python的环境,真可谓是NB的很。 若能由程序代劳&#xff0c;何必亲手&#xff1f;…...

基于VS Code 为核心平台的python语言智能体开发平台搭建

以下是基于 VS Code 为核心平台&#xff0c;整合 Node-RED、Gradio、Docker Desktop 的智能体可视化开发平台优化方案&#xff0c;聚焦工具链深度集成与开发效率提升&#xff1a; 一、核心架构设计 #mermaid-svg-f8l9kYPAlJ2TlpGF {font-family:"trebuchet ms",verd…...

Python 创意:AI 图像生成

一、基于 Stable Diffusion 的本地创意创作 Stable Diffusion 是开源图像生成模型的代表,通过 Python 结合diffusers库,可实现本地图像生成。 1. 环境搭建 首先,安装必要的库: pip install diffusers transformers torch若使用 GPU 加速,需安装对应版本的 CUDA 和 cuD…...

vue3 传参 传入变量名

背景&#xff1a; 需求是&#xff1a;在vue框架中&#xff0c;接口传参我们需要穿“变量名”&#xff0c;而不是字符串 通俗点说法是&#xff1a;在网络接口请求的时候&#xff0c;要传属性名 效果展示&#xff1a; vue2核心代码&#xff1a; this[_keyParam] vue3核心代码&…...

Skipped breakpoint at ... because of stepping in another thread问题分析

在Java多线程应用程序的调试过程中&#xff0c;开发者可能会遇到“Skipped breakpoint at … because of stepping in another thread”这样的提示。这通常是因为调试器在处理多线程操作时&#xff0c;忽略了某个断点。本文将详细分析这一问题的原因&#xff0c;并提供有效的解…...

MATLAB脚本实现了一个转子系统的参数扫描和分岔分析

% 参数扫描范围 clc; clear; close all;S_values 500:200:20000; % 转速范围% 定义系统参数 N 5; % 质量点数量 num_nodes N; % 节点数 num_dofs_per_node 4; % 每个节点的自由度数 num_elements num_nodes-1; % 单元数 total_dofs num_nodes * num_dofs_per_node; % 总自…...

基于Flask的AI工具聚合平台技术解析

基于Flask的AI工具聚合平台技术解析 一、项目架构设计 本系统采用经典的三层架构模式&#xff0c;通过Mermaid架构图可清晰看到数据流向&#xff1a; 用户请求通过浏览器发送至Flask服务器路由系统解析请求路径模板引擎动态渲染页面静态资源提供样式支持独立数据模块实现内容…...

AUTOSAR图解==>AUTOSAR_SWS_CryptoInterface

AUTOSAR 加密接口(Crypto Interface)详解 基于AUTOSAR标准4.4.0的加密接口规范详细分析与图解 目录 概述 1.1 加密接口的作用与位置 1.2 主要术语解释架构设计 2.1 加密接口架构 2.2 组件关系内部结构 3.1 类结构 3.2 配置项运行流程 4.1 加密请求处理流程 4.2 同步与异步处理…...

GCD算法的学习

GCD算法的学习 学习了前辈wzx15927662183的文章GCD算法精讲-CSDN博客 介绍 GCD通常用来求两个数的最大公约数 算法的核心&#xff1a;gcd(a,b) gcd(b,a % b) 证明的思路&#xff1a; 证明 gcd(a, b) gcd(b, a % b) 的思路&#xff1a; 设 a > b 1. 构造 a % b : 设 …...

完美解决浏览器不能复制的问题(比如赛氪网的中题库练习题)

仅供复制题库题目进行打印学习使用&#xff01; 最近想把赛氪网题库中的题目打印出来做练习&#xff0c;发现题库中的题目不能复制&#xff0c;不能在试卷上勾画标记太难受了&#xff0c;而且不能留作材料以后复习&#xff0c;故出此策。 而且CtrlP打印出的pdf会缺少题目。(我…...

Java 爬虫按关键字搜索淘宝商品:实现与优化

在电商领域&#xff0c;获取淘宝商品信息对于市场分析、价格监控和竞争情报等方面具有重要意义。Java 爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详细介绍如何使用 Java 爬虫按关键字搜索淘宝商品&#xff0c;并提供完整的代码示例。 一、准备…...

build.gradle task copyJarToDesktop

build.gradle task copyJarToDesktop 构建完&#xff0c;拷贝jar包到指定文件夹AAA&#xff0c;例如&#xff1a;桌面&#xff0c;方便拉到宝塔发布 build.gradle plugins {id org.springframework.boot }jar {enabled false // 不生成 plain.jar }bootJar {archiveFileNa…...

Git合并分支的两种常用方式`git merge`和`git cherry-pick`

Git合并分支的两种常用方式git merge和git cherry-pick 写在前面1. git merge用途工作方式使用git命令方式合并使用idea工具方式合并 2. git cherry-pick用途工作方式使用git命令方式合并使用idea工具方式合并 3. 区别总结 写在前面 一般我们使用git合并分支常用的就是git mer…...

基于n8n的AI应用工作流原理与技术解析

基于n8n的AI应用工作流原理与技术解析 在AI技术深度融入企业数字化转型的今天&#xff0c;开源工作流自动化工具n8n凭借其灵活的架构和强大的集成能力&#xff0c;成为构建智能自动化流程的核心引擎。本文将从技术原理、AI融合机制、典型应用场景三个维度&#xff0c;解析n8n在…...

Day3-UFS深入学习路线

UFS 学习链接1&#xff1a;UPUI数据包格式 学习链接2&#xff1a;UPUI数据包详解 学习链接3&#xff1a;UFS电源及低功耗 一、基础准备阶段 1.理解存储技术背景 学习NAND Flash基本原理&#xff08;SLC/MLC/TLC、读写擦除操作、磨损均衡&#xff09;。对比其他存储协议&…...

广东2024信息安全管理与评估一阶段答案截图

2023-2024 学年广东省职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题一 模块一 网络平台搭建与设备安全防护 一、 比赛时间 本阶段比赛时间为 180 分钟。 二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一…...

8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发

摘要 深入探讨 RustAxum 数据库集成&#xff0c;包括 ORM 选型及实践&#xff0c;助力用户管理系统开发。 一、引言 在现代 Web 应用开发中&#xff0c;数据库集成是至关重要的一环。Rust 凭借其高性能、内存安全等特性&#xff0c;与 Axum 这个轻量级且高效的 Web 框架结合…...

题解:CF886E Maximum Element

正难则反&#xff0c;考虑长度为 i i i 的排列得到正确的结果的方案数。 设 d p i dp_i dpi​ 表示长度为 i i i 的排列直到循环完也没有提前 return 的方案数。考虑 i i i 所放置的位置&#xff0c;由于不会提前 return&#xff0c;也就说明该数字所在的位置为 [ i − k…...

OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理

wxwidgets开源桌面软件框架使用 - 哔哩哔哩 wxwidgets跨平台GUI框架使用入门详解_哔哩哔哩_bilibili 一、wxwidgets配置【见上一讲五、】 二、安装wxFormBuilder 1、wxFormBuilder介绍、安装 wxFormBuilder是一个开源的GUI设计工具&#xff0c;支持C、Python等语言&#…...

20250418项目接入scalar

scalar官网地址 scalar-dotnet文档地址 1. 引入nuget包 这里必须是2.1.* 以上 否则不支持多库 <PackageReference Include"Scalar.AspNetCore" Version"2.1.16" />2. 引入命名空间 using Scalar.AspNetCore;3. 使用scalar var documents new[] {…...

数控铣床自动上下料机械手控制装置设计

一、引言 在数控铣床加工过程中&#xff0c;实现自动上下料能够提高生产效率、降低劳动强度、减少人为因素对加工质量的影响。设计一款高效、可靠的数控铣床自动上下料机械手控制装置&#xff0c;是实现数控铣床自动化加工的关键。 二、控制装置设计要求 自动化程度&#xf…...

STM32F407的引脚说明

当笔记站 引脚说明在STM32F407数据手册中的48页到71页&#xff0c;下载地址&#xff1a; https://www.stmcu.com.cn/Designresource/detail/document/696193?auto_download1 以下是在图片转表格得到的东西 Pinouts and pin description …...

STM32单片机入门学习——第41节: [12-1] Unix时间戳

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.18 STM32开发板学习——第41节: [12-1] Unix时间戳 前言开发板说明引用解答和科普一…...

使用Pydantic优雅处理几何数据结构 - 前端输入验证实践

使用Pydantic优雅处理几何数据结构 - 前端输入验证实践 一、应用场景解析 在视频分析类项目中&#xff0c;前端常需要传递几何坐标数据。例如智能安防系统中&#xff0c;需要接收&#xff1a; 视频流地址&#xff08;rtsp_video&#xff09;检测区域坐标点&#xff08;point…...

【Hot100】41. 缺失的第一个正数

目录 引言缺失的第一个正数初始理解问题方法一分析&#xff1a;排序后遍历方法二分析&#xff1a;辅助数组寻找满足条件的解法代码实现验证例子复杂度分析 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【…...

FairMOT算法详解

FairMOT(Fairness in Detection and Re-Identification for Multi-Object Tracking)是一种基于联合学习(Joint Learning)的多目标跟踪(MOT)算法,由中科院自动化所团队提出。其核心思想是通过单阶段网络同时完成目标检测和重识别(Re-ID)特征提取,解决了传统两阶段方法…...

java线程池原理及使用和处理流程

实际测试使用如下&#xff1a; package com.study;import java.util.concurrent.*;/*** 线程池作用&#xff1a;* 1、线程的复用* 2、资源管理* 3、任务调度* --------------执行过程--------------* 第1-3个任务进来时&#xff0c;直接创建任务并执行* 第4-8个任务进来时&…...

奖学金排序问题

#include <bits/stdc.h> using namespace std;const int N 305; // 定义最大学生人数为305// 定义学生结构体&#xff0c;包含语文、数学、英语成绩、总分以及学生编号 struct node {int yuwen; // 语文成绩int mat_h; // 数学成绩int english; // 英语成绩i…...

useMemo + memo + useContext 性能优化实战:从无感重渲染到丝滑体验

在 Vue 中我们可能依赖 Vuex computed 进行状态共享和性能优化&#xff0c;而在 React 里呢&#xff1f;不需要用 Redux&#xff0c;靠 useContext、memo、useMemo 三剑客就能构建高性能组件通信方案&#xff01; &#x1f9e9; useContext 再回顾&#xff1a;状态共享不等于性…...

集合框架--Set集合详解

set集合 set 系列集合特点&#xff1a; 无序&#xff1a;存或取的元素的顺序可能是一致的&#xff0c;也可能不是 不重复&#xff1a;集合中不能存储重复的元素&#xff0c;我们可以利用这个特性去重 无索引&#xff1a;我们不可以通过索引获得set中的每一个元素 Set接口没…...

git -- 对远程仓库的操作 -- 查看,添加(与clone对比),抓取和拉取,推送(注意点,抓取更新+合并的三种方法,解决冲突,对比),移除

目录 对远程仓库的操作 介绍 查看 (git remote) 介绍 查看详细信息 添加(git remote add) 介绍 与 git clone对比 从远程仓库中抓取与拉取 抓取(git fetch) 拉取(git pull) 推送(git push) 介绍 注意 抓取更新合并的方法 git fetch git merge 解决冲突 git …...

Hadoop的三大结构及其作用

Hadoop 的三大核心结构及其作用如下&#xff1a; 1. 分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09; 作用&#xff1a; 海量数据存储&#xff1a;提供高吞吐量、高容错性的分布式存储能力&#xff0c;支持存储 TB/PB 级的大规模数据…...

Java学习笔记--多态:多态的介绍,多态的基本使用,多态的条件下成员的访问特点,多态的好处

目录 1.多态的介绍 2.多态的基本使用 ​编辑 3.多态的条件下成员的访问特点 3.1成员变量 3.2成员方法 4.多态的好处(为什么学多态) 1.问题描述: 2.多态方式和原始方式new对象的优缺点: 一.多态的介绍 1.前提:a.必须有子父类继承或者接口实现关系b.必须有方法的重写(没…...

使用Python设置Excel单元格边框

在数据驱动的业务场景中&#xff0c;自动化设置Excel单元格边框成为提升数据处理效率的关键环节。通过程序化控制边框样式&#xff0c;不仅能确保海量报表格式的统一性&#xff0c;还能通过粗细、虚实等视觉元素强化数据逻辑层次。当面对动态更新的分析报告时&#xff0c;代码驱…...

ES中常用的Query和查询作用,以及SpringBoot使用实例

ES中常用的Query和查询作用&#xff0c;以及 SpringBoot 使用实例 文章目录 ES中常用的Query和查询作用&#xff0c;以及 SpringBoot 使用实例MatchAllQueryTermQueryBoolQueryRangeQueryMatchQueryMultiMatchQueryTermsQueryPrefixQueryWildcardQueryRegexpQueryFuzzyQueryDis…...

美信监控易告警:功能强大

美信监控易是一款功能强大的运维管理软件&#xff0c;其告警功能在保障系统稳定运行方面发挥着重要作用。 一、运维行业背景 随着信息技术的快速发展&#xff0c;企业的信息化程度越来越高&#xff0c;对 IT 系统的依赖也日益增强。IT 系统的稳定运行直接关系到企业的业务正常…...

字符串系列一>最长回文子串

目录 题目&#xff1a;解析&#xff1a;代码&#xff1a; 题目&#xff1a; 链接: link 解析&#xff1a; 代码&#xff1a; class Solution {public String longestPalindrome(String s) {char[] ss s.toCharArray();int n ss.length;int begin 0;//返回结果的起始字符串…...

CAPL编程系列_02

1_CAPL 中的运算符 在CAPL&#xff08;CANoe/CANalyzer Programming Language&#xff09;中&#xff0c;运算符用于执行各种运算操作&#xff0c;类似于其他编程语言。CAPL中的运算符可以分为以下几类&#xff1a; 1. 算术运算符 算术运算符 加法运算符 - 减法运算符*乘法运…...

AI Agents系列之构建多智能体系统

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

FPGA学习——DE2-115开发板上设计波形发生器

1. 实验目的 掌握直接数字频率合成&#xff08;DDS&#xff09;技术的基本原理和应用。使用DE2-115开发板实现正弦波和方波的生成。使用SignalTap II嵌入式逻辑分析仪测试输出波形的离散数据。 2. 实验原理 DDS技术&#xff1a;通过相位累加器生成相位信息&#xff0c;结合波…...

51单片机实验二:数码管静态显示

目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.单个数码管显示 2.六个数码管依次从0~F变换显示 3.proteus仿真 一、实验环境与实验器材 环境&#xff1a;Keli&#xff0c;STC-ISP烧写软件,Proteus. 器材&#xff1a;TX-1C单片机&#xff08;STC89C52RC…...

JavaScript性能优化实战指南

1. 引言 JavaScript作为现代Web开发的核心技术&#xff0c;为网页带来了丰富的交互性和动态功能。然而&#xff0c;随着Web应用日益复杂&#xff0c;JavaScript代码的性能成为影响用户体验的关键因素。性能不佳的JavaScript可能导致页面加载缓慢、交互卡顿、甚至浏览器无响应&…...

POSIX 信号量(Semaphore)

一、POSIX 信号量基础 1. 什么是信号量&#xff1f; 信号量 是一种同步机制&#xff0c;用于控制对共享资源的访问。它通过一个整数值表示可用资源的数量&#xff0c;支持两种原子操作&#xff1a; P操作&#xff08;Wait&#xff09;&#xff1a;尝试减少信号量值&#xff0…...

深度学习驱动下的字符识别:挑战与创新

一、引言 1.1 研究背景 深度学习在字符识别领域具有至关重要的地位。随着信息技术的飞速发展&#xff0c;对字符识别的准确性和效率要求越来越高。字符识别作为计算机视觉领域的一个重要研究方向&#xff0c;其主要目的是将各种形式的字符转换成计算机可识别的文本信息。近年…...

DOM TreeWalker API 详解

DOM TreeWalker API 详解 TreeWalker API 是 DOM 中一个强大但相对较少使用的功能&#xff0c;它提供了一种有效遍历文档树的方式。它比手动递归或使用简单的节点导航方法更加灵活和高效。 TreeWalker 基本概念 TreeWalker 对象可以让你按照指定的过滤条件&#xff0c;以特定…...

深度学习| Deep Snake环境配置+训练+预测评估(超全面)

前言:Deep Snake是一个比较经典结合了轮廓的深度学习分割方法,但是去实际运行Deep Snake项目的时候遇到了很多问题。这篇文章把Deep Snake从环境配置、训练到预测评估,都做了详细的教程,还补充了一些相关的知识点。 Deep Snake配置和运行 Deep Snake信息数据集COCOMask-&g…...