单片机原理及应用笔记:C51的运算符与项目实践

单片机原理及应用笔记

作者简介

李永康,男,银川科技学院计算机与人工智能学院,2022级计算机与科学技术9班本科生,单片机原理及应用课程第7组。

指导老师:王兴泽

电子邮件:3214729183@qq.com

个人CSDN主页:m0_65081425-CSDN博客

前言

本篇文章是参考《单片机原理及应用(c语言版)第2版》杨居义·编著教材编写的笔记

由李永康、王宁、刘永泰、文轩同学共同完成此篇文章,其中王宁同学负责编写算术运算符、关系运算符的相关知识,文轩同学负责编写逻辑运算符、逻辑表达式的相关知识、李永康同学负责编写C51位操作及表达式的相关知识,刘永泰同学负责编写实操步骤的编写、李永康同学负责将以上同学的内容进行整合排版。

此篇文章将实时更新,敬请期待。。。

模块三、C51程序设计与项目实践

项目11:C51的运算符与项目实践

1.算术运算符、关系表达式及优先级
1)基本算术运算符。
运算符意义实例(设x=11 ,y=3)
+加法运算符Z=X+y;  //Z=14
-减法运算符Z=X-y;  //Z=8
*乘法运算符Z=X*y;  //Z=33
/除法运算符Z=X / y;  //Z=3
%模(求余)运算符Z=X%y;  //Z=2

在上述运算符中,加法、减法和乘法符合一般的算术运算规则。除法运算时,如果是两个整数相除,其结果为整数;如果是两个浮点数相除,其结果为浮点数。而对于模运算,则要求两个运算对象均为整型数据

除法运算时,当两个整数相除时,结果会是整数,并且会进行截断,即只保留商的整数部分,丢弃小数部分。当两个浮点数相除时,结果会是浮点数,能够保留小数部分。而对于模运算,要求两个操作数都是整数,模运算的结果是除法后得到的余数。

C语言规定了算术运算符的优先级结合性

优先级:指当运算对象两侧都有运算符时,执行运算的先后次序。按运算符优先级别的高低顺序执行运算。
结合性:指当一个运算对象两侧的运算符优先级别相同时的运算顺序。
算术运算符中取负运算(-x)的优先级最高,其次是乘法、除法和取余,加法和减法的优先级最低。也可以根据需要,在算术表达式中采用括号来改变优先级的顺序。

例如:
a+b/c,该表达式中,除号优先级高于加号,故先运算b/c所得结果,之后再与a相加。
(a+b)* (c-d) -e;该表达式中,括号优先级最高,其次是“*”,最后是减号。故先运算(a+b)和(c-d),然后再将二者结果相乘,最后与e相减。


2)自增/减运算符

自增/减运算符的作用是使变量值自动加1或减1。

运算符意义实例 ( 设x=3;)
x++后置自增:先返回当前值,再让x加1y=X++; //y=3,x=4
++x前置自增:先将x的值加1,再返回增
加后的值
y=++X; //y=4,  x=4
x--后置自减:先返回当前值,然后再将
x的值减1
y=X--; //y=3,x=2
 
--x前置自减:先将x的值减1,然后再
返回减少后的值
y=--X; //y=2,x=2


++和 -- 运算符只能用于变量,不能用于常量和表达式。如++(a+1)是错误的。
例如:
++i、--i,在使用i之前,先使i值加(减)1。
i++、i--,在使用i之后,再使i值加(减)1。
粗略地看,十+i和i++的作用都相当于i=i+1,但++i和i++的不同之处在于++i先执行i=i+1,再使用i的值;而i++则是先使用i的值,再执行i=i+1。
例如:若i值原来为5,则
执行j=++i;后j的值为6,i的值也为6;执行j=i++;后j的值为5,i的值为6。

3)类型转换


运算符两侧的数据类型不同时,要转换成同种类型。转换的方法有两种:一是自动转换,编译系统在编译时自动进行类型转换,顺序是bit→char→int→long→float,signed→unsigned;二是强制类型转换,通过类型转换运算来实现。

其一般形式如下:
(类型说明符)(表达式)
功能:把表达式的运算结果强制转换成类型说明符所表示的类型。
例如:
(double)a          将a强制转换成double类型;
(int)(x+y)        将x+y值强制转换成int类型;
(float)(5%3)   将模运算5%3的值强制转换成float类型。

2.关系运算符、关系表达式及优先级
1)C51提供六种关系运算符
运算符意义实例(设a=2,b=3)
<小于a <b; //返回值1
>大于a >b; //返回值0
<=小于等于a <=b; //返回值1
>=大于等于a >=b; //返回值0
==等于a ==b; //返回值0
!=不等于a !=b; //返回值1
2)关系运算符的优先级

(1)<、>、<=、>=的优先级相同,==和!=的优先级相同;前4种优先级高于后
两种。
(2)关系运算符的优先级低于算术运算符
(3)关系运算符的优先级高于赋值运算符

例如:

c>a+b     等效于     c>(a+b);

a>b!=c    等效于    (a>b)!=c;
a=b>c     等效于    a=(b>c);


3)关系运算符的结合性为左结合

例如:
a=4、b=3、c=1,且{=a>b>c,则a>b的值为 1,1>c的值为0,故 f=0.

4)关系表达式

关系表达式指用关系运算符和将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、字符表达式)连接起来的式子。关系表达式的结果为真和假。C51中用0表示假,用1 表示真。

3.逻辑运算符、逻辑表达式及优先级
1)C51提供3种逻辑运算符
运算符意义实例(设a=2,b=3)
&&逻辑“与”,非零的数值会被视为true,而0则被视为falsea&&b; //返回值1。两个操作数都为true时返回true,否则返回false.
||逻辑“或”allb; //返回值1。只要任意一个操作数为true,结果就为true。只有在两个操作数都为false(即都为0)时,结果才为false。
!逻辑“非”,对操作数进行取反运算,逻辑非运算会将布尔值取反。!a:  //返回值o

&& 和‖是双目运算符,要求有两个运算对象;而!是单目运算符,只要求有一个运算对象。

2)逻辑运算符的优先级

在逻辑运算中,逻辑非的优先级最高,且高于算术运算符;逻辑或的优先级最低,低于关系运算符,但高于赋值运算符。

3)逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。其值应为逻辑量真或假,逻辑表达式与关系表达式的值相同,以0代表假,以1代表真。

4)逻辑运算符的结合性为从左到右

例如:
a=4,b=5 则:
!a            为假。因为 a=4(非 0)为真,所以!a为假(0)。
al b            为真。因为 a,b为真,所以两者相或为真。
a&&b         为真。
!a&&b        为假(0)。!优先级高于&&,先执行!a为假(0),0&&b=0,结果为假。

4.C51位操作及表达式

C51提供6种位运算符:

&     按位与;

|      按位或;

^     按位异或;

~    按位取反;

<<  位左移;

>>  位右移;

除按位取反运算符~,以上位操作运算符都是双目运算符,即要求运算符两各有一个运算对象

1)“按位与”运算符 &

运算规则:参与运算的两个运算对象,若两者相应的位都为1,则该位结果为1,否则为0,即0&0=0、0&1=0、1&0=0、1&1=1。

例如:  a=45h=01000101b,b=0deh=11011110b,则表达式c=a&b=44h。

按位与的主要用途如下:

(1)清零。用0去和需要清零的位进行按位与运算。
(2)取指定位。

2)“按位或”运算符|

运算规则:参与运算的两个运算对象,若两者相应的位中有一位为1,则该位结果为1,否则为0,即0|0=0、0|1=1、1|0=1、1|1=1。

例如:a=30h=00110000b,b=0fh=00001111b,则表达式c=alb=3fh。

按位或的主要用途是将一个数的某些位置1,则需要将这些位与1按位或,其余的位与0进行按位或运算则不变。

3)“按位异或”运算符^

运算规则:参与运算的两个运算对象,若两者相应的位相同,则结果为0;若两者相应的位相异,结果为1,即0^0=0、0^1=1、1^0=1、1^1=0。

例如:a=0a5h,b=3dh,则表达式c=a^b=98h。

按位异或的主要用途如下:

(1)使特定位翻转(0变1,1变0)。需要翻转的位与1按位异或运算,不需要翻转的位与0按位异或运算。原数和自身按位异或后得0。

(2)不用临时变量而交换两数的值。

4)“按位取反”运算符~

~是一个单目运算符,用来对一个二进制数按位取反,即0变1,1变0。

5)位左移和位右移运算符<<和>>

位左移、位右移运算符<<和>>,用来将一个二进制数全部左移或右移若干位;移位后,空白位补0,而溢出的位舍弃。

例如:a=15h,则a=a<<2=54h;a=a>>2=05h

6)赋值运算符和复合赋值运算符

符号=称为赋值运算符,其作用是将一个数据的值赋予一个变量。赋值表达式的值就是被赋值变量的值。

在赋值运算符的前面加上其他运算符就可以构成复合赋值运算符。在C51中共有以下几种复合运算符,它们均为双目运算符。

+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=、~=

采用这种复合赋值运算的目的是简化程序、提高C程序编译效率。例如:
a+=b    相当于    a=a十b                a%=b    相当于    a=a%b

a-=b     相当于    a=a-b                  a<<=3   相当于    a=a<<3

a*=b     相当于    a=a*b                 a>>=2    相当于    a=a>>2

a/=b     相当于    a=a/b                  ……

7)其他运算符

[ ]      数组的下标;

()      括号;

.        结构/联合变量指针成员;

&      取内容;

?       三目运算符;

,        逗号运算符;

sizeof     sizeof运算符,用于在程序中测试某一数据类型占用多少字节。

任务11-2-1:分别用P2、P3口显示“加减”运算的结果
1.任务要求

(1)了解“加”运算及编程。
(2)了解“减”运算及编程。
(3)掌握十进制数、十六进制数、二进制数转换。
(4)掌握无符号字符型定义,即“unsigned char a,b;”。
(5)掌握无限循环编程。

2.任务描述

分别用P2、P3口显示“加减”运算结果。把两个数进行“加减”运算,即设52+48和52-48,把“加”运算结果传送至P2口显示出来,把“减”运算结果传送至P3口显示出来。

3.任务实现

1)分析
定义两个无符号字符型变量a、b,并分别赋值为十进制数52、48,然后进行a+b、a-b运算,并把运算结果分别传送至P2、P3口显示。
2)程序设计
先建立文件夹XM11-2-1,然后建立工程项目XM11-2-1,最后建立源程序文件XM11-2-1.c,输人如下源程序。

#include<reg51.h>l/包含单片机寄存器的头文件

/*******************************************************

函数功能:主函数(C语言规定必须有1个主函数)
********************************************************/

void main(void)

{     

          unsigned char a,b;                  //定义无符号字符型,qu'shi取值范围位0~255

          a = 52;                                    //a赋值为52
          b = 48;                                    //b赋值为48
          P2=a+b;                                 /*P2=52+48=100=64H=01100100B,结果为P2.7、P2.4、P2.3、P2.1、P2.0接的LED灯亮*/
          P3=a-b;                                 /*P3=52-48=4=00000100B,结果为P3.7、P3.6、P3.5、P3.4、P3.3、P3.1、P3.0接的LED灯亮*/
          While ( 1);                          //无限循环
          ;                                           //空操作
}

3)用Proteus软件仿真

经过Keil软件编译通过后,在ProteuslSIS编辑环境中绘制仿真电路图,将编译好的“XM11-1.hex”文件加载到AT89C51里,然后启动仿真,就可以看到分别用P2、P3口显示“加减”运算结果,效果图如下图所示。

任务11-2-2:用P1口显示逻辑“与或”运算的结果
1.任务要求

1)掌握“与”运算及编程。

2)掌握“或”运算及编程。

2.任务描述

用P1口显示逻辑“与或”运算结果。把(6>0x0f)&&(8<0xa)和(6>0x0f) ||(8<0xa)运算结果传送至P1口显示出来。

3.任务实现

1)分析
把(6>0x0f)&&(8<0xa)进行“与”运算,即(6>0x0f)&&(8<0xa)=0&&1=0结果传送至 P1 口使得8只LED 全亮,然后调延时;再把(6>Ox0f) |(8<0xa)进行“或”运算即(6>0xOf)1(8<Oxa)=0 || 1=1,结果传送至 P1口,使得8只LED全灭,然后调延;再把(6>0x0f)|| (8<0xa)进行“或”运算,即“(6>0x0f)|| (8<0xa) =0 || 1=1,最终结果送P1口使得8只LED全灭,然后调延时。

2)程序设计

先建立文件夹“XM11-2,然后建立“XM11-2”工程项目,最后建立源程序文件“XM11-2.c”,输入如下源程序:
门:
#include<reg51.h>           //包含单片机寄存器的头文件/****************************************
函数功能:用整型数据延时时间
****************************************/

void delay(void)     /*两个void意思分别为无需返回值,没有参数传递*/
{
unsigned int i;       /*定义无符号整数,最大取值范围65535*/
for(i=0;i<50000;i++)         //做50000次空循环
        ;                   //什么也不做,等待一个机器周期
}
/*******************************************************
函数功能:主函数
********************************************************/
void main(void)
{
while(1)           //无限循环{
P1= ((6>0xOf)&& (8<OxOa) )+0xfe;     /*运算结果送P1=0000 0000B,LEDO~LED7灯亮*/
delay();                  //延时
3)用Proteus软件仿真

经过Keil软件编译通过后,在ProteuslSIS编辑环境中绘制仿真电路图,将编译好的“XM11-2.hex”文件加载到AT89C51里,然后启动仿真,就可以看到用P1口显示逻辑“与或”运算结果,效果如下图所示。

任务11-2-3:分别用P2、P3口显示“按位与或”运算的结果
1.任务要求

1)掌握位“与”、“或”运算及编程;

2)掌握十六进制数、二进制数转换。

2.任务描述

分别用P2、P3口显示位“与或”运算结果。把两个数十六进制数进行位“与或”运算,即设
“0x52&0x48"和“0x52|0x48”,把位“与”运算结果送P2口显示出来,把位“或”运算结果送P3口显示出来。

3.任务实现

1)分析:设两个十六进制数进行位“与”运算即“0x52&0x48=01010010&01001000=01000000”,把运算结果送P2口显示出来,把数“0x52|0x48=01010010&01001000=01011010”运算结果送P3口显示出来。
2)程序设计
先建立文件夹“XM11-3",然后建立“XM11-3"工程项目,最后建立源程序文件“XM11-3.c”,输入如下源程序::
#include<reg51.h>          //包含单片机寄存器的头文件

/*************************************************
函数功能:主函数(C语言规定必须有1个主函数)
********************************************************/
void main(void){
P2=0x52&0x48;     /*P2=01010010&01001000=01000000B,结果为P2.7、P2.5、P2.4、P2.3、P2.2、P2.1、P2.0接的LED灯亮*/
P3=0x52|0x48;       /*P3=01010010&01001000=01011010B,结果为P3.7、P3.5、P3.2、P3.0、接的LED灯亮*/
While ( 1);/无限循环
;         //空操作
}
3)用Proteus软件仿真
经过Keil软件编译通过后,在ProteuslSIS编辑环境中绘制仿真电路图,将编译好的“XM11-3.hex”文件加载到AT89C51里,然后启动仿真,就可以看到分别用P2、P3口显示位“与或”运算结果,效果图如下图所示。

任务11-2-4:用P1口显示“位左右移”运算结果
1.任务要求

1)掌握“右移”、“左移”运算及编程;

2)掌握二进制数移位;

3)掌握无限循环编程。

2.任务描述

用P1口显示“左右移”运算结果。把数“0xaa”进行“<<"左移1位运算,即“0xaa<<1”,把运算结果送P1口显示出来,调延时,再把P1左移1位运算送显示;然后再把刚刚左移2位的数进行右移2位运算,分别把运算结果送P1口显示出来。

3.任务实现

1)分析

设一个十六进制数“0xaa”,展开为二进制数为10101010B,进行左移1位运算
“10101010B→01010100”,规则为高位丢掉,低位添0,把运算结果送P1口显示,再进行左移1位运算“01010100→10101000”,把运算结果送P1口显示即LED6、LED4、LED2、LED1、LEDO亮,其他LED7、LED5、LED3灭。

2)程序设计
先建立文件夹“XM11-4”,然后建立“XM11-4”工程项目,最后建立源程序文件“XM11-4.c”,输入如下源程序:

然后再把这个数据进行右移2位运算,即“10101000→01010100—00101010”,再把运算结果送P1口显示即LED7、LED6、LED4、LED2、LEDO亮,其他LED5、LED3、LED1灭。
#include<reg51.h>        //包含单片机寄存器的头文件

/****************************************
函数功能:用整型数据延时时间
***************************************/
void delay(void)        /*两个void意思分别为无需迟回值,没有参数传递*/
{
unsigned int i;         //定义无符号整数,最大取值范围65535;

for(i=0;i<50000;i++)      //做50000次空循环
       ;                      //什么也不做,等待一个机器周期
}

/*******************************************************
函数功能:主函数
********************************************************/
void main(void)
{
while(1)           //无限循环{
P1=0xaa<<1;  /*运算结果送P1=01010100B,LED7、LED5、LED3、LED1、LED0亮,其他LED6、LED4、LED2灭*
delay();            //延时
P1= P1<<1;    /*运算结果送P1=10101000B,LED6、LED4、LED2、LED1、LED0亮,其他LED7、LED5、LED3灭*
delay();           //延时
P1=P1>>1;    /*运算结果送P1=01010100B,再把运算结果送P1口显示即LED7、LED5、LED3、LED1、LED0亮,其他LED6、LED4、LED2灭*I
delay();          //延时
P1=P1>>1;   /*运算结果送P1=00101010B,再把运算结果送P1口显示即LED7、LED6、LED4、LED2、LED0亮,其他LED5、LED3、LED1灭*l
delay();         //延时
}
}
3)用Proteus软件仿真
经过Keil软件编译通过后,在ProteusISIS编辑环境中绘制仿真电路图,将编译好的“XM11-4.hex”文件加载到AT89C51里,然后启动仿真,就可以看到用P1口显示“左右移”运算结果,效果图如下图所示。

总结

以上就是关于c51的运算符与项目实践的相关知识了,后续内容持续更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习 PostgreSQL + Spring Boot 3 +mybatisplus整合过程中的报错记录

今天计划学习 PostgreSQL&#xff0c;并顺便尝试使用 Spring Boot 3.x 框架&#xff0c;打算整合 Spring Boot 3、PostgreSQL 和 MyBatis-Plus。整合后一直出现以下报错&#xff1a; 去AI上面搜了讲的是sqlSessionFactory 或 sqlSessionTemplate 没有正确配置 初始分析&#…

linux提权【笔记总结】

文章目录 信息收集通过命令收集信息内核&#xff0c;操作系统&#xff0c;设备信息等用户信息环境信息进程与服务安装的软件服务与插件计划任务查看是否存在明文密码查看与主机的通信信息查看日志信息 通过脚本收集信息LinEnum脚本介绍复现 Linuxprivchecker复现 linux-exploit…

URDF统一机器人建模语言

统一机器人建模语言 URDF&#xff08;Unified Robot Description Format&#xff09;统一机器人描述格式&#xff0c;URDF使用XML格式描述机器人文件。 我们从下面四个方面介绍URDF&#xff1a; URDF的组成介绍 URDF-Link介绍 URDF-Joint介绍 创建一个简单的URDF…

目标检测指标:AP,mAP

目标检测指标&#xff1a;AP&#xff0c;mAP 论文&#xff1a;A Survey on Performance Metrics for Object-Detection Algorithms 文章目录 目标检测指标&#xff1a;AP&#xff0c;mAP摘要1 介绍2 主要的性能指标TP、FP、FNP、RAP A P 11 AP_{11} AP11​ A P a l l AP_{all}…

Chromium HTML Tags与c++接口对应关系分析

一、HTML 标签(HTML Tags) <a> <head> <img>等等这些标签在c中的接口是如何定义和查找的呢&#xff1f; 更多标签参考&#xff1a; HTML <a> target 属性 (w3school.com.cn) 二、html_tag_names.json5 (third_party\blink\renderer\core\html\htm…

基于SpringBoot的体育商城购物系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【AI大模型】初识LangChain:功能强大的语言模型框架

目录 &#x1f354; 什么是LangChain &#x1f354; LangChain主要组件 2.1 Models 2.1.1 LLMs (大语言模型) 2.1.2 Chat Models (聊天模型) 2.1.3 提示模板 2.1.4 Embeddings Models(嵌入模型) 2.2 Prompts 2.3 Chains(链) 2.4 Agents (代理) 2.5 Memory 2.6 Inde…

爬虫post收尾以及cookie加代理

爬虫post收尾以及cookie加代理 目录 1.post请求收尾 2.cookie加代理 post收尾 post请求传参有两种格式&#xff0c;载荷中有请求载荷和表单参数&#xff0c;我们需要做不同的处理。 1.表单数据&#xff1a;data字典传参 content-type: application/x-www-form-urlencoded; …

鸿蒙开发案例:HarmonyOS NEXT语法实现2048

【实现的功能】 • 游戏逻辑&#xff1a;实现了2048游戏的核心逻辑&#xff0c;包括初始化游戏盘面、添加随机方块、处理四个方向的滑动操作等。 • UI展示&#xff1a;构建了游戏的用户界面&#xff0c;显示得分、游戏盘面&#xff0c;并提供了重新开始按钮。 • 用户交互&…

【Docker基础六】docker-compose安装zookeeper、kafka、kafdrop

本文使用 Bitnami/Kafka 提供的kafka容器镜像。详情参考&#xff1a;bitnami/kafka - Docker 镜像 |Docker 中心 创建Docker Compose文件 创建一个名为 docker-compose.yml 的文件&#xff0c;并复制以下内容 version: "3.8" services:zookeeper:image: docker.io…

【C语言】赋值运算符自增、自减

C语言中用来表示赋值&#xff0c;将符号右边的常量或变量的值&#xff0c;赋值给左边的变量。 等号用来表示&#xff0c;一般用于判断条件&#xff0c;属于关系运算的一种&#xff0c;所以会有返回值&#xff0c;1或0。 #include <stdio.h> /* 功能&#xff1a;赋值运算…

微信小程序后台搭建—node+mysql

想必大家都有一个困扰&#xff0c;想要用微信小程序作为前端&#xff0c;但是后端不知道如何用node连接微信小程序&#xff0c;我最近也一直困扰许久&#xff0c;所以我就想用node写后端接口在连接微信小程序&#xff0c;记录一下学习笔记 前言 前端:微信小程序 后端:nodeexpr…

QT QML 练习8-Simple Transformations

简单的转换&#xff08;Simple Transformations&#xff09; 转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移&#xff0c;旋转&#xff0c;缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始…

去掉CODESYS的用户管理密码

首先在成功连接PLC的情况下&#xff08;CODESYS登录成功&#xff09;情况下&#xff1a; 1. 2. 3. 4.CODESYS自动化应用进阶&#xff08;二&#xff09;&#xff1a;如何安装使用CODESYS RTE及使用CODESYS RTE过程中常见的问题_哔哩哔哩_bilibili 视频在00&#xff1a;57&…

基于Spring Boot的企业客户管理系统

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&am…

仿 Mac 个人网站开发 |项目复盘

一、前言 1.1 灵感来源 早年有幸看到国外大佬做的一个 基于 Web 的 Windows XP 桌面娱乐系统, 那时刚好有搭建一个个人博客的想法, 所以就想是否可以基于 WEB 实现一个仿 Mac UI 的个人博客, 以应用的形式来展示博客各个功能! 1.2 相关链接(求个 Star) 前端开源代码后端开源…

OpenAI 实时语音Realtime API接口申请: 助力开发者打造快速语音对话体验

OpenAI发布宣布推出Realtime API的公开测试版&#xff0c;所有付费开发者都可以在他们的应用中构建快速的语音对话体验。该API支持六种预设语音&#xff0c;类似于ChatGPT的高级语音模式&#xff0c;使自然的语音对话成为可能。 此外&#xff0c;Chat Completions API也新增了音…

【微服务】springboot远程docker进行debug调试使用详解

目录 一、前言 二、线上问题常用解决方案 2.1 微服务线上运行中常见的问题 2.2 微服务线上问题解决方案 2.3 远程debug概述 2.3.1 远程debug原理 2.3.2 远程debug优势 三、实验环境准备 3.1 搭建springboot工程 3.1.1 工程结构 3.1.2 引入基础依赖 3.1.3 添加配置文…

linux下使用mpi求自然数和

搭建MPI并行计算环境&#xff0c;编写 MPI程序&#xff0c;求和 1 23....1 0000。 要求: 1.使用100个进程; 2.进程0计算1 2...100, 进程1计算101 102... 200, ..... 进程99计算9901 9902... 10000; 3.调用计时函数,分别输出每个进程的计算时间; 4.需使用MPI集群通信函数和同…

【数据结构】时间、空间复杂度详解

大家有没有遇到过&#xff0c;为什么有些程序跑得飞快&#xff0c;而有些程序却慢得让人抓狂&#xff1f;我们可能都是这样认为的&#xff1a;他写的程序效率高等等&#xff0c;确实如此。但这背后隐藏着两个重要的概念&#xff1a;时间复杂度和空间复杂度。它们就像程序的“效…