自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 罗马数字转整数(简单)

罗马数字转整数算法:对输入字符串s从前往后遍历,并设置初始值为0的变量sum用于记录转换之后的整数值,sum的值会随着遍历的进行不断发生变化,遍历结束时的sum值即为罗马数字对应的整数值。设立一个map型变量m用于存储罗马字符到整数值的映射。在遍历字符串过程中,对于位置i处的元素,首先判断i+1处是否还有字符,若没有,则直接将位置i处的罗马数字对应的整数加到sum中;若有,还要判断i处罗马数字和i+1处罗马数字组成的罗马数字是否属于六种特殊情况之一,其实只要判断i处罗马数字的映射(整数)是否小于i

2021-07-19 16:32:48 390

原创 explicit用法

  使用关键字explicit的一条黄金法则是:对于所有只需提供一个参数就能调用的构造函数,除非你想要利用它进行隐式转换,否则一律将该构造函数声明为explicit。  下面来解释以下为什么要这样做:  编译器在调用函数时如果传入实参与函数形参类型不一致时可以采用隐式转换来转换实参类型使其与形参保持一致。这意味着编译器可以使用构造函数(其形参表中只有一个参数)来进行隐式转换以得到正确的参数类型。举个例子://Foo 类有一个可以用于隐式转换的构造函数class Foo {public:

2021-05-02 10:10:37 573

原创 SPI通讯协议

1.SPI协议简介 SPI(Serial Peripheral Interface)协议是由摩托罗拉公司提出的通讯协议,是一种高速全双工通信总线,被广泛使用于ADC、LCD等设备与MCU间,要求通讯速率较高的场合。2.SPI物理层 SPI通讯使用3条总线(SCk、MOSI、MISO)外加一条片选线(SS、又常称为NSS、CS)。 每个从设备与主设备间都使用一条独立的片选线相连,当片选线为低电平时表示该从设备被选中。所有从设备的SCK、MOSI、MISO总线并联,仅当某从设备被选中时,其上述三根总线中传

2021-04-15 10:14:19 672

原创 STM32怎么看中断源

STM32怎么看中断源:以USART1_IRQn为例,它在stm32f4xx.h文件的第196行开始的typedef enum IRQn中。截取其中属于F407的部分:typedef enum IRQn{/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ NonMaskableInt_IRQn = -14

2021-04-09 10:51:42 1408

原创 函数模板

函数模板和类模板1.函数模板当几个函数函数功能相同,仅仅是参数类型不同时,可以定义函数模板函数模板实际上是定义一个通用函数,其函数类型和形参类型不确定,用一个虚拟的类型来代替。函数模板只适用于函数体相同,函数参数个数相同而类型不同的情况。上代码:# include<iostream>using namespace std;template <typename T> //模板声明,其中T为类型参数T max(T a, T b, T c){ if (a<b)

2021-02-16 10:14:11 381

原创 求两链表的共同后缀

《算法笔记》中的求两链表共同后缀的起点#include<iostream>#include<cstdio>using namespace std;# define Maxsize 100000struct Node{ char data; int next;}node[Maxsize];int main(){ int addr1, addr2; // 分别存放两个单词第一个字母的地址 int n; //总字母数 cout

2021-02-10 17:59:08 632

原创 如何用VS Code正确编写运行一个CPP程序

如何用VS Code正确编写运行一个CPP程序  最近准备用VS Code来复习一下数据结构的算法题,可是发现写出来的程序总是运行不成功,就算照着书上的程序敲都显示运行问题,那应该是我除了源程序以外,还有一些其他的文件没有配置好了,(因为此时的VSC是可以运行部分CPP程序的)看其他人的帖子要么讲不清楚,要么讲得太复杂,索性自己去看官方文档了。假设此时你的编译器(GCC)和相应的扩展已经配置好。编写一个源程序,编译调试并成功运行的步骤如下:1.编写源程序  打开cmd,输入以下命令,mkdir p

2021-02-10 16:52:16 2841

原创 简易计算器的实现

简易计算器的实现(不含括号)主要步骤:1.输入中缀表达式,并去除空格2.中缀表达式转换为后缀表达式(change函数)3.计算后缀表达式(Cal函数)其中要注意的细节:1.根据操作符的优先级仔细考虑操作符的出栈和入栈顺序2. 当中缀表达式遍历结束时操作符栈可能不空,此时要对操作符栈中元素依次出栈上代码:#include <iostream>#include <cstdio>#include <string>#include <stack&gt

2021-02-10 09:24:10 579

原创 运算符重载

运算符重载运算符的重载实际上是通过函数重载实现的。一般格式:函数类型 operator 运算符名称(参数列表){对运算符的重载处理}上面的重载格式中,“operator +”就是重载函数的函数名,意为对“+”运算符的重载函数例如,想将"+"重载为对complex(复数)类的加法运算,函数原型可以为:Complex operator + (Comples &c1, Complex &c2);看一段代码????# include<iostream>using na

2021-02-07 11:38:11 307

原创 静态数据成员和静态成员函数

静态数据成员  静态数据成员在内存中只占一份空间,而不是每个对象都为它分配空间,每个对象都可以引用这个数据成员。静态数据成员所占的空间不属于对象,同成员函数类似。它所占的内存在声明一个类的时候程序开始运行时就已被分配,并可被使用(同静态变量类似)。静态数据成员可以被初始化,但只能在体外被初始化。如果静态数据成员是公用的(在public下声明),则可以在体外采用类名或对象名直接引用,而如果它是私有的(在private下声明),则它只能采用对象名(不可能是对象名,因为对象的数据成员若是私有的,只能通过对象的成

2021-02-04 10:35:16 935

原创 #两台主机之间通信时为什么要用IP地址,而不直接用硬件地址?

两台主机之间通信时为什么要用IP地址,而不直接用硬件地址?  既然在网络链路上传送的数据帧最终是用硬件地址来寻找目的主机,为什么还要用IP地址进行通信,为什么不直接是用硬件地址进行通信?  首先要知道,在全世界有各种各样的网络(如WAN,LAN,2G,3G),它们使用不同的硬件地址,要使这些异构网络进行通信必须要进行硬件地址转换,而要让用户或者用户主机来完成这一任务几乎是不可能的(虽然我也不知道为什么这项工作很复杂),但采用IP编址之后,全球的每台主机似乎都处于同一个网络之中,它们都拥有唯一的一个IP地

2021-02-02 16:02:42 2454

原创 hello程序的编写与执行

1. 编写源文件  用程序编辑器编写好源文件hello.c,源文件在计算机中以ASII形式存放,属于文本文件,可显示可读。2. 对源文件进行编译链接生成可执行文件  在Unix系统中可用GCC编译器对源文件进行编译。命令如下:unix >gcc -o hello.cunix>为shell命令行解释器的命令提示符,shell命令行解释器会根据我们输入的命令调用对应的程序,因此输入gcc之后就是调用编译器对源文件进行编译链接并生成可执行文件,保存在磁盘上。3.程序执行  1、2两步中以

2021-02-01 17:36:25 2272

原创 唐朔飞《计算机组成原理》和袁春风《计算机组成与体系结构》中算数左移部分的差别

唐的《计组》第234页说:不论是正数还是负数,移位后符号位均不变,这是算数移位的重要特点。第236页给出了实现算数左移和算数右移的硬件示意图。第237页给出了用带进位的移位实现算数左移。袁的教材67页说:算数左移时,高位移出,低位补0,每移一位,如果移出的高位不同于移位后的符号位,即左移前后符号位不同,则结果溢出。上面这两种表述其实是不同的。例如,袁的教材中给出了一个例子:若x是带符号机器数80 00 00 04H,即1000 0000 0000 0000 0000 0000 00

2021-01-31 17:04:30 1734 1

原创 有关指令集架构与微架构的一些知识

指令集(架构)与微架构  如果把处理器比作是一个算盘的话,指令集架构就是算盘运算时使用的“加减乘除”这些法则,你看不见摸不着,但确实是客观存在的法则;微架构就是算盘上的算珠,你能看得见摸得着。所以,微架构决定着CPU内部原件“长什么样子”,它们如何排列;而具体的工作原理就是指令集架构所规定的。1.指令集的概念  从应用问题到机器语言程序的每次转换都属于软件的范畴,而机器语言程序所运行的计算机硬件和软件之间需要一个“桥梁”,这个在软件和硬件之间的界面就是指令集体系结构(Instruction Set

2021-01-29 15:30:19 921 5

原创 指向一维数组的指针与指向一维数组中的元素的指针的区别

指向一维数组的指针与指向一维数组中某个元素的指针的区别????先看几段代码吧:1. #include <stdio.h>int main(){ int a[4]={1,3,5,7}; int (* p)[4]; p=&a; printf("a[3]=%d\n",(*p)[3]); printf("指针p的值=%d\n", p); printf("指针p+1的值=%d\n", p+1); printf("&a的值=%d\n", &a); prin

2021-01-28 21:28:38 815

原创 C语言的发展历史

C语言的发展历史  C语言是由贝尔实验室的Dennis M.Ritchie最早设计并实现的。为了使unix操作系统得以推广,1977年,Ritchie发表了不依赖于具体机器的C语言编译文本《可移植的C语言编译程序》。1978年,Brian W.Kernighan和Dennis M.Ritchie合著出版了《The C Progamming Language》,从而使C语言称为目前世界上最流行的高级程序设计语言。  1988年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C

2021-01-28 12:09:55 971

原创 如何配置RCC

配置RCC1.时钟树的主要部分  25M的外部时钟(HSE)经过分频因子M变为1M(此处M为25,M必须与外部晶振的时钟频率相同,即经过M分频之后,时钟频率须为1M),再经过倍频因子N变为336M(如果想超频使用,就修改N),成为VCO时钟,再经过分频因子p(一般配置成2),出来的到168M的PLLCLK,即锁相环时钟,PLLCLK经过开关SW会被选为SYSCLK,即系统时钟。HSE是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从 4-26MHZ 不等。所有的外设被挂载到AHB,APB2

2021-01-27 19:05:36 714

原创 固件库编程点亮LED小灯

在STM32F407上固件库编程点亮LED小灯的主要步骤第一步 外设寄存器结构体定义条件编译:如果没有定义某个宏,就定义这个宏,并且可以防止重复编译用结构体进行GPIO寄存器映射:外设寄存器结构体定义GPIO_TypeDeftypedef struct{ __IO uint32_t MODER; /*GPIO模式寄存器 地址偏移: 0x00 */ __IO uint32_t OTYPER; /*GPIO输出类型寄存器 地址偏移: 0x04 */ _

2021-01-27 19:04:48 400

原创 STM32F407-寄存器编程点亮LED小灯

原理:由STM32控制引脚输出高、低电平,实现开关控制,把GPIO引脚接入到LED灯,从而控制LED灯的亮灭。将GPIO对应引脚设置成推挽输出模式并且默认下拉,输出低电平,就可以让LED灯亮起来。假设我们要点亮的是红灯定义启动文件:“startup_stm32f40xx.s”定义stm32f4xx.h 文件,在其中写好存储器映射,在写存储器映射时,要将无符号数表示的地址显示地转换成指针(指针就是地址,计算机并不知道这一串无符号数表示地址)三步走点亮小灯:将连接到RGB红灯的PF6引脚配置成输出模式

2021-01-27 19:04:00 1867

原创 指针变量作为被调函数形参时让人易混淆的地方

问题描述:指针变量作为被调函数形参时,为什么有时候在被调函数调用结束后,main函数中作为实参的指针会发生变化,有时又不发生变化。先上代码吧????:代码1:#include <stdio.h>int k=7;void f(int **s){ int *t=&k; *s=t; printf("%d,%d,%d,", k, *t, **s); }main(){ int i=3,*p=&i, **r = &p; f(r);

2021-01-27 18:44:16 315

原创 C语言中几个0之间的区别

照例先上代码????# include <stdio.h>void main(){//以下以数值形式输出printf("数值形式输出:\n"); printf("0=%d\n",0); printf("'0'=%d\n",'0'); printf("'\0'=%d\n",'\0'); printf("NULL=%d\n",NULL);//以下以字符形式输出printf("字符形式输出:\n"); printf("0=%c\n",0); printf("'0'=%c\n"

2021-01-27 18:40:30 967

原创 2021-01-11

VC++6.0的一些使用技巧:打开文件的插件: FileTool.dll加行号的插件:VC6LineNumberAddin

2021-01-12 11:30:22 50

原创 Python教程

简单易懂的python教程,我是搬运工,请戳这里:链接:https://www.liaoxuefeng.com

2019-06-29 10:41:02 1361 1

原创 如何安装ubuntu

我是搬运工:

2019-06-28 10:11:06 139

原创 如何安装win10

详情请咨询以下链接,我只是个搬运工,哈哈哈:

2019-06-28 10:08:38 217

原创 Git 教程

学习如何使用Github前须先学习Git。具体教程参见廖雪峰老师的Git教程,简单易懂。

2019-06-26 15:48:31 156

原创 Ubuntu18.04 重启和关机总是卡死

接触ubuntu不久,在关机和重启的时候总是遇到卡死的问题,我之前关机的时候都是用鼠标点桌面右上角的电源按钮选择关机或者重启,结果总是卡死。 上网搜了看了很多帖子,其中有一篇说可以用在终端输命令行来关机的方法,试了一下,有的可以有的不行。 大致可以输入这些命令进行关机或者重启:重启:1. sudo reboot #立刻重启 ✅2. su...

2019-06-26 10:15:24 8581

原创 ubuntu18.04版本连不了wifi

初次安装ubuntu的朋友可能会遇到和我一样的困难:兴冲冲地把ubuntu给装好了,准备好好熟悉一番,结果它上不了网!!!我的电脑是Lenovo拯救者,装的双系统 win10 和Ubuntu18.04,前前后后大概花了一星期,看各种帖子,有的说可能是IP地址,DNS,网关等设置有问题,有的说可能是无线网卡驱动没装好,我试了无数次,都不是前几个问题,最终侥幸成功了。如果大家在设置网络的时候,...

2019-06-24 15:57:04 6355 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除