自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从Intel开发手册看x86指令格式(含手动将指令转化为机器码的方法)

Instruction Prefixes为指令前缀,Opcode为操作码,Displacement为偏移,Immediate为立即数注:ModR/M和SIB在本文后面会详细介绍(摘自卷2:Intel 64 and IA-32 Architectures Instruction Format)

2025-03-24 09:50:52 641

原创 【x86汇编】C语言的switch&case结构的反汇编分析

push ebppush ebxpush esipush edipush ebp指令未执行时,打开寄存器窗口发现ESP=0x0012FFC18,为画栈区图做准备EBP的值入栈后,再次查看寄存器窗口发现有两个寄存器的值发生变动:EIP和ESPEIP寄存器(Extend Instruction Pointer 扩展指令指针寄存器,其存储指令的地址。

2024-10-29 19:57:40 1559

原创 从Redis源码看大小端序的转换

..:表示额外的参数,可有可无,是否有额外的参数取决于format指向的字符串,例如"%d",2中2为额外的参数,这一点和printf一样,这里也不再赘述。向已定大小的缓冲区(sized buffer)写入格式化(formatted)的缓冲区(buffer,其实是数组)16代表16bit,即2个字节,临时指针变量x接收指针p的值,使用中间变量t来交换x[0]和x[1]存储的值。,因为字符串的结尾要填充\0,n-1+1==n,这样正好填满容量为n个字符的buffer数组。

2025-04-04 10:54:43 460

原创 CD22.【C++ Dev】类和对象(13) 流提取运算符的重载和const成员

表示this指向的对象可以修改,void Date::Print() const表示this指向的对象不可以修改,从可以修改到不可以修改为权限的缩小,正常运行。d1<d2的执行会有问题,由d1的定义可知:d1的成员对象不能修改,而bool Date::operator< (const Date& d2)第一个参数为this,与d1的地址对应,导致。Print()中隐藏的参数是this,虽然this指针的类型为const Date*,但是 const Date*中const。

2025-04-03 15:11:19 532

原创 CCE19.【C++ Cont】练习题组19(map和set专题)

注:erase()内可以为迭代器(例如mp.erase(up)) ,也可以为具体的值(例如mp.erase(*up))显然需要存储双关键字的map或者unordered_map,第一个关键字存储单词,第二个关键字存储来源的文章(输入数字时,如果该数字已经出现,不打印,否则插入unordered_map。存储双关键字,第一个关键字存储数字,第二个关键字存储数字的出现的次数。存储单关键字,输入数字时,如果该数字已经出现,不打印,否则插入set。*up值为2,但low--后去*low会发生错误,

2025-04-02 16:03:34 774

原创 CD21.【C++ Dev】类和对象(12) 流插入运算符的重载

operator<<(ostream& out, const Date& d)的第一个参数不能用const修饰,因为向流中插入东西,对<<运算符重载,让它可以支持自定义类型的打印(不能使用printf,只支持内置类型,)例如:cout<<d2<<d3<<d1→cout<<d3<<d1→cout<<d1。若理解了两个参数的含义和用法,则cout << d1 << d1;但如果连续使用<<就会出现错误,例如cout << d1 << d1;执行,则cout << d1 << d1转换为void << d1。

2025-04-01 19:58:38 664

原创 CC49.【C++ Cont】枚举算法(1)

枚举算法:罗列所有情况,找出符合题目要求的情况(暴力算法),容易超时重点思考:1.枚举的对象(枚举什么) 2.枚举的顺序(正序?逆序?) 3.枚举的方式(普通枚举?递归枚举?二进制枚举?

2025-03-31 11:15:23 890

原创 OS6.【Linux】基本指令入门(5)

1.记录程序运行的每一个关键时刻,会包含时间、日志的等级(warning?error?debug?、具体的信息和其他信息2.日志是按行打印的。

2025-03-30 15:32:33 834

原创 CD20.【C++ Dev】类和对象(11) 日期类对象的成员函数(++、--、日期-日期)

要考虑前置和后置,不能简单实现为d+=1,且前置++和后置++有规定的格式。

2025-03-29 10:37:18 824

原创 CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)

天数加在日上,有可能会溢出,需要进位则需要考虑每一个月最多多少天,而且二月份比较特殊(闰年2月有29天,非闰年2月有28天),可以写一个函数来取得每个月的天数。优化1:day数组为局部数组,每次调用该函数,程序都会创建day数组,如果多次调用,该步骤会消耗大量时间,可以尝试使用全局数组或者将数组放到静态区上。结果:拷贝对象一共四次(过程图有问题去问问!(注:Date tmp(*this)传的是*this,为Date::Date(const。日期+天数:显然需要重载"+",操作:?

2025-03-28 15:08:36 993

原创 CC48.【C++ Cont】高精度算法(乘法和除法)

此"高精度乘法"并非高精度,题目只要求余数,不考虑小数,而且给的a和b的范围不一样,a是高精度,b是低精度,因此为。,可能tmp = tmp * 10 + dividend_to_arr[k]会超出。1.需要使用一个低精度变量tmp来记录每一次除法的余数,用于下一次除法。文章一样的思想:先将字符串转化为整型数组再模拟竖式乘法。文章一样的思想:先将字符串转化为整型数组再模拟竖式除法。2.由上图可知:会有前导0,因此计算完后要处理前导0。例如1234/45==27。高精度除以低精度问题。

2025-03-27 14:29:49 492

原创 CC46.【C++ Cont】模拟算法

模拟算法指定是模拟题目的实现流程,即给什么做什么.之前的竞赛题目中绝大部分是模拟题,竞赛一般第一题为模拟题。

2025-03-26 16:19:16 509

原创 CD18.【C++ Dev】类和对象(9)(声明和定义分离的写法以及代码复用)

Date::Date(int year , int month, int day)//指定类域_day = day;Date::Date(const Date& x)//指定类域void Date::Print()//指定类域bool Date::operator< (const Date& d2)//指定类域注:当声明和定义分离时,定义需要写类域,否则编译器无法区分是普通函数还是成员函数。

2025-03-25 19:00:22 927

原创 CC47.【C++ Cont】高精度算法(加法和减法)

当数据的值特别大,各种类型都存不下时,此时就要用高精度算法来计算加减乘除例如题:给定,显然使用是存不下的,需要使用高精度算法。

2025-03-23 09:32:05 620

原创 CD17.【C++ Dev】类和对象(8):赋值运算符

目录1.赋值运算符重载不是拷贝构造,也不是初始化2.实现赋值运算符重载分析实际上这样写会有潜在的问题:连续赋值问题的解决提问分析变式问题3.优化赋值运算符分析4.默认的赋值运算符5.重要说明对比以下代码:赋值运算符重载:已经存在的两个对象之间的拷贝(如d3 = d1)构造函数:用一个已经存在的对象去初始化另一个对象例如对于以下的Date类,实现赋值运算符重载分析如果按照CD15文章的运算符重载格式可能,写出以下代码测试以下代码,下断点到return 0,查看d1和d2的成员变量貌

2025-03-22 09:56:28 1127

原创 CD16.【C++ Dev】类和对象(7):运算符重载

可以写一个cmp_date函数,返回类型为bool型,为了避免传值,使用传引用调用const Date&类外定义运算符重载的缺点:如果成员变量为私有或者保护,将不能被访问(目前先这样理解,之后有解决方法)是否重载运算符要看重载后的运算符是否有意义,例如日期+日期或者日期-日期没有任何意义,没有必要重载。相比于cout << cmp_date(d1, d2) << endl;5.用于内置类型的运算符的含义不能改变,比如内置的整型+,不能改变其含义。<没有内置这样的比较规则,所以会报错,

2025-03-21 14:15:19 900

原创 CD15.【C++ Dev】类和对象(6) 拷贝构造函数的其他说明

之前在文章中提到过拷贝构造函数的第三个特点:若未显式定义,编译器会生成默认的拷贝构造函数,默认的拷贝构造函数对象按字节序完成拷贝,即浅拷贝或值拷贝public:MyQueue不需要写它的拷贝构造,直接调用自定义类型MyStack的拷贝构造return st;MyStack st;return st;MyStack st;return st;return st;

2025-03-20 09:01:03 931

原创 CD14.【C++ Dev】类和对象(5) 析构函数和拷贝构造函数

int _month;int _day;运行结果:通过运行结果反向观察:调用function()函数前,先调用了Date的拷贝构造函数也可以在function(d1);处下断点,看看下一步要做什么:按F11后,发现先调用了Date的拷贝构造函数最后才调用了function函数本身则有以下。

2025-03-19 16:10:36 1006

原创 CD13.【C++ Dev】类和对象(4) 构造函数和析构函数

​1.类的默认成员函数分类默认成员函数一共6个,即如果不手动写,编译器也会默认生成的函数1.初始化和清理函数构造函数:负责初始化工作析构函数:负责资源清理工作2.拷贝和赋值函数拷贝构造函数:负责使用同类对象初始化创建对象工作赋值重载函数:负责把一个对象赋值给另一个对象工作3.普通对象取地址重载函数和const 修饰的对象据地址重载函数这个两个很少手动实现,故不介绍2.构造函数和析构函数之前在CC24.【C++ Cont】结构体文章中讲过这两个函数,但讲的比较浅,这里深入

2025-03-18 07:53:17 789

原创 CC45.【C++ Cont】STL中的哈希表及练习

对比之前在CC42.【C++ Cont】STL库的红黑树set的使用文章讲过的set,set底层用的,而unordered_set和unordered_multiset的底层用的使用方法完全一样set存的是,unordered_set和unordered_multiset存的是这里以unordered_set为例。

2025-03-17 18:46:29 712

原创 CC44.【C++ Cont】哈希表的模拟实现

按理来说,4字节的最大值应该是0xffffffff,但数组元素的类型为int,其取值为-2,147,483,648~2,147,483,647,其中2,147,483,647==0x7fffffff,那为什么无穷大不取0x7fffffff呢?0x3f3f3f3f为1061109567,数量级为10的9次方级别的,而int类型的最大值2147483647也为10的9次方级别的,一般的。,且0x3f3f3f3f的两倍仍然小于int类型的最大值,,如果最大数为1e5,一般找+3后的1e5+3。

2025-03-16 11:02:34 683

原创 L25.【LeetCode笔记】循环队列(链表解法)

发现四个选项都有%maxsize,解释maxsize:循环队列的总空间,例如当maxsize==5时,最多只能存4个元素,要留下一个空间来判断空和满。是正确的,如果为ring.end+1 == ring.front,则在第1、2步时会出问题(注意:第1~4步包含了front和end所有可能的取值,,在上方代码的myCircularQueueRear函数中,rear指向尾节点的下一个节点,// 返回 true。// 返回 true。文章中提到过数组的解法,链表解决的思想也在那篇文章中,本文写写链表的代码。

2025-03-15 09:57:07 827

原创 CC43.【C++ Cont】哈希表的简介

目录1.定义核心思想:关键字→映射关系→存储地址2.哈希函数定义3.哈希冲突定义4.设计哈希函数的常用方法1.直接定址法2.除留余数法5.处理哈希冲突的常用方法1.线性探测法注意事项2.链地址法哈希表(hash table),又称散列表,可根据关键字直接进行访问,由此看出访问速度快关键字:可以理解为向哈希表中存储的数据原理:哈希表建立了一种关键字和存储地址之间的直接映射关系,使每个关键字与结构中的唯一存储位置相对应由于哈希表可根据关键字直接进行访问,因此在理想情况下,查找的时间复杂度为之前在C31.【C++

2025-03-14 14:16:18 768

原创 CD12.【C++ Dev】类和对象(3)

文章中讲过lea指令的作用,即传指针的值,ecx作为中转寄存器,存放了d1对象的地址,准备为Init成员函数传参。),尽管this指针为空,但是并没有发生访问错误,因此Print函数正常执行,打印Print()字符串。前三个push遵循从右向左的压入参数的规则:压入参数的顺序为7,3,2025(7E9h),之前在文章中提到过,class和C语言的struct有区别的,成员函数放在。举一个调用例子: d1.Init(2025, 3, 7);,访问了成员变量_a,但this指针为空,因此会发生非法访问。

2025-03-13 08:19:40 604

原创 CD11.【C++ Dev】类和对象(2)

都是调用同一个函数Init,之前提到过成员函数存放在公共代码段,那日期的数据是怎么存放到对象中的呢?其实对象中不存放成员函数是有原因的:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次,浪费空间。解决方法:代码只保存一份,在对象中保存存放代码的地址,只保存成员变量,成员函数存放在。,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”如果对象中只有成员函数,那么对象的大小为1字节(

2025-03-12 15:48:00 1055

原创 CC42.【C++ Cont】STL库的红黑树set的使用

此时不建议用multiset,时间复杂度较高,如"11111111111111"字符串中"1"字符串出现的次数,显然需要遍历整个红黑树,时间复杂度为。if (mp1.count("abc")&&mp1["abc"]==1),如果&&前的条件不成立,后面的条件将不会执行,利用。则对于上面这个题可以这样存:既存字符串也存字符串的出现次数,即map<string,int>,这样时间复杂度是。注:这里所说的"实际元素个数",map.size()和map.multiset()返回值可能不一样。

2025-03-11 07:49:19 1092

原创 U1.【UVA】块问题-The Blocks Problem(补充了pair的使用)

pile a onto b 其中a和b是积木编号,将包含积木a及其上方所有积木的堆叠移动到积木b上。move a onto b 其中a和b是积木编号,将积木a放在积木b上。在执行此操作之前,需要将积木a和积木b上堆叠的所有积木放回其初始位置。下标的积木堆上,位于积木堆的?例如move a onto b:a上方归位+b上方归位,a及a以上(其实只有a)的积木放在b上。现要求编程来模拟打造的过程,只有4个有效指令,初始时输入积木的个数n(0<n<25),编号。及其上方所有积木的堆叠放在包含积木b的堆叠的顶部。

2025-03-10 09:53:04 949

原创 CD10.【C++ Dev】类和对象(1)

原因:虽然是相同的函数,但是属于不同的类域,因此互不干扰struct Astruct B原因:成员变量写在前面或者后面都能找到,因为类域是整体struct Aint a;a = 1;//使用上方定义的a或者struct Aa = 1;//使用下方定义的aint a;a = 1;注意struct和class的格式:结尾有分号!

2025-03-09 09:53:17 798

原创 CD7.【C++ Dev】引用&(reference) 下

承接CD6.【C++ Dev】引用&(reference) 中文章,介绍权限的平移 缩小 扩大的问题以及引用的实质和一道面试题

2025-03-08 09:52:21 768

原创 CD6.【C++ Dev】引用&(reference) 中

常引用(const reference)即允许通过引用访问某个变量,但不允许通过该引用修改变量的值(即具有常量属性。

2025-03-07 14:20:27 988

原创 L33.【LeetCode题解】循环队列(数组解法)

队列不为空时,删除元素:当front==k时,再插入元素时front++,之后处理越界的front,使其等于0,则,front==(front+1)%(k+1)队列未满时,插入元素:当rear==k时,再插入元素时rear++,之后处理越界的rear,使其等于0,则,rear==(rear+1)%(k+1)要访问循环队列的头和尾,需要两个指针front(头指针)和rear(尾指针),初始状态下,链表为空时,front和rear都指向同一个节点。// 返回 true。// 返回 true。

2025-03-06 09:04:07 978

原创 CC41.【C++ Cont】红黑树的简单了解

1.红黑树(Red Black Tree,简称RBT) 是一种自平衡二叉查找树,也是一棵特殊的二叉搜索树,因此红黑树是二叉搜索树2.红黑树在搜索树的基础上,使每个结点增加一个存储位表示结点的颜色,可以是 Red(红) 或者 Black(黑),通过对任意一条从根到叶子的路径上各个结点着色方式的限制确保没有一条路径会比其他路径长出2倍,因此是一棵接近平衡的二叉搜索树,但不是平衡二叉树!3.红黑树相对于AVL树(参见CC40.【C++ Cont】二叉搜索树和平衡二叉树。

2025-03-05 15:40:15 796

原创 CC40.【C++ Cont】二叉搜索树和平衡二叉树

二叉搜索树(Binary Search Tree,简称BST),又称二叉排序树若左子树非空,则左子树所有节点的值均小于根节点的值;若右子树非空,则右子树所有节点的值均大于根节点的值左右子树也是一棵二叉搜索树即左<根<右,因此中序遍历的结果是从小到大(图来自《程序是怎样跑起来的》第81页)从图中可以看出:第二层:从左到右:30<75;第三层:从左到右:17<41<63<84;中序遍历为:17-->30-->41-->50-->63-->75-->84。

2025-03-04 10:50:40 1149

原创 CC39.【C++ Cont】STL中的堆:priority_queue

priority_queue翻译过来即优先级队列。和一般的队列有所不同,优先级队列显然按优先级去做详细解释为:元素被赋予优先级,当插入元素时,同样是在队尾,但是会根据优先级进行位置调整,优先级越高,调整后的位置越靠近队头;同理删除元素也根据优先级进行,优先级最高的元素(即队头)最先被删除,可以理解为优先级队列就是堆的体现

2025-03-03 11:10:07 763

原创 CC38.【C++ Cont】模拟实现堆

算法:1找出左右孩子中权值最大的那个,如果该点的权值比最大孩子的权值小,那么就交换;2.重复步骤1,直到该点比两个孩子结点的权值都大,或者换到叶节点为止。以建大根堆为例,静态实现即开辟一个足够大的数组,每尾插入一个元素就向上调整(除了新插入的元素之外,其余节点构成大根堆)将堆顶元素和最后一个元素交换,然后 n--,删除最后一个元素,从根节点开始执行一次向下调整算法。文章中讲过,只不过是动态实现的,本文讲静态实现。文章中讲过,只不过是动态实现的,本文讲静态实现。注意:1.找出左右孩子中权值最大的那个的。

2025-03-02 09:18:59 888

原创 OS4.【Linux】基本指令入门(3)

文章讲过,由于rm指令比较危险,且文件较难恢复,没有Windows系统下的回收站策略,因此在一个工程中一般是建立一个delete文件夹,然后使用 mv 指令移走文件,定时对delete进行删除。注意到"not found",推测输入指令时,系统会先去找指令,如果没有则显示"Command '?例如:显示器(为输出设备,则可以写入数据,即写入显存,但不能读数据),键盘(只能读数据),普通文件(可写可读)在Ubuntu系统下,ll是ls -alF的别名,而在CentOS系统下,ll是ls -l的别名,这个。

2025-03-01 09:17:56 881

原创 CD9.【C++ Dev】对“auto替换为变量实际的类型”的解释

之前在文章中提到了如下内容:即auto并非是一种“类型”的声明,而是一个类型声明时的“”,编译器在编译期间(预编译-->编译-->汇编-->链接,在第二个阶段完成以后)会将auto为变量实际的类型(具体是怎么替换的参见C++ Dev专栏的文章,竞赛中不要求掌握)本文将解释以上内容。

2025-02-28 14:13:15 380

原创 OS5.【Linux】基本指令入门(4)

继续介绍一些常见指令 cat more less head tail 管道的特性 一道笔试题

2025-02-27 21:53:23 357

原创 CD8.【C++ Dev】auto、范围for、内联函数和nullptr

注意:编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量例如上方代码的a和b,编译器只对a推导,推导出的类型用来定义变量b。

2025-02-27 15:19:44 1374

原创 CD5.【C++ Dev】引用&(reference) 上

竞赛中的传引用调用讲的有点粗略,本文详细介绍引用的几个特性及应用。

2025-02-26 15:03:21 739

8086汇编用栈来分解并显示数字的bin文件

用栈来分解并显示数字文章的bin文件,可以写入vhd

2024-10-26

C语言模拟试卷1第一大题要点提示

C语言模拟试卷1题目+答案

2024-10-01

汇编实现从1加到1000的bin文件

这是汇编实现从1加到1000文章的配套资源,bin文件写入主引导扇区后可在VirtualBox上运行

2024-09-14

汇编语言在虚拟机中输出“Hello World!”的bin文件

bin文件

2024-09-05

VS 2022的float.h

float.h详细内容

2024-07-15

VS 2022的limits.h

limits.h详细内容

2024-07-15

空空如也

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

TA关注的人

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