学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十四周学习总结
学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十四周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(2024-2025-1计算机基础与程序设计第十四周作业) |
这个作业的目标 | <《C语言程序设计》第13-14章并完成云班课测试> |
作业正文 | ... 本博客链接 https://www.cnblogs.com/vincent2077 |
教材学习中的问题和学习内容( AI)
问题1:原码,反码和补码
学习内容1:
原码(True Form)
- 定义:原码是最直观的二进制表示方式,其中最高位用作符号位(0表示正,1表示负),其余位表示数值本身。
- 优点:易于理解和转换,与十进制的表示方式相似。
- 缺点:在进行加减运算时需要特殊处理,且存在两种表示0的方式(+0和-0)。
反码(One's Complement)
- 定义:反码是一种改进的原码,用于简化二进制的加减运算。正数的反码与其原码相同,负数的反码是其原码除符号位外,其他各位取反。
- 优点:简化了减法运算,因为减去一个数等同于加上它的反码。
- 缺点:存在两种表示0的方式(+0和-0),并且当进行加法运算时可能会得到一个溢出位,需要额外处理。
补码(Two's Complement)
- 定义:补码是现代计算机中最常用的整数表示方式。正数和零的补码与其原码相同,负数的补码是其反码加1。
- 优点:
- 简化了算术运算,使得加法和减法可以用相同的硬件处理。
- 消除了正负数表示中的歧义,0只有一种表示方式。
- 便于检测算术溢出,因为最大的正数和最小的负数之间没有间隙。
- 缺点:对于初学者来说,理解和转换补码可能比原码和反码更复杂。
转换关系
- 从原码到反码:对于负数,将原码除符号位外的所有位取反。
- 从反码到补码:在反码的基础上加1。
应用
- 计算机硬件:补码因其简化算术运算而在计算机硬件设计中被广泛采用。
- 编程语言和编译器:在底层实现时,编程语言和编译器使用补码来处理整数的存储和运算。
- 软件开发者:虽然软件开发者通常不需要直接处理补码,但了解补码有助于理解底层数值表示和算术运算。
问题2:计算机内存单位
学习内容2:
位(bit)
位是计算机内存中最小的数据单位,表示一个二进制数字,即0或1
所有其他内存单位都是位的倍数
字节(Byte)
1字节(Byte)等于8位(bit)
由于1个字节可以表示2^8(即256)个不同的值,字节是计算机处理数据的基本单位
千字节(Kilobyte, KB)
1千字节(KB)等于1024字节(Byte)
“Kilo-”表示1000,但在计算机科学中,1KB通常表示2^10(即1024)字节,这是因为计算机使用二进制
兆字节(Megabyte, MB)
1兆字节(MB)等于1024千字节(KB)
也就是2^20字节
吉字节(Gigabyte, GB)
1吉字节(GB)等于1024兆字节(MB)
也就是2^30字节
太字节(Terabyte, TB)
1太字节(TB)等于1024吉字节(GB)
也就是2^40字节
在实际应用中,计算机的内存大小通常以MB、GB或TB为单位,而存储设备(如硬盘、SSD、USB驱动器)的容量则可能使用这些单位中的任何一个。
问题3:单精度浮点数表示
学习内容3:
单精度浮点数(Single Precision Floating Point)是一种使用32位(4字节)来表示实数的计算机数据类型。它遵循IEEE 754标准,该标准定义了浮点数的表示和运算方式。单精度浮点数的32位被分为三个部分:符号位、指数位和尾数位。
- 符号位(Sign Bit):最高位(第31位)是符号位,用于表示数的正负。0表示正数,1表示负数。
- 指数位(Exponent Bits):接下来的8位(第30位到第23位)是指数位,用于表示数的大小。指数位采用偏移表示法,偏移量为127。这意味着实际的指数值是指数位的值减去127。指数位可以表示的范围是从-126到127(因为0和255是特殊值,分别用于表示非规格化数和无穷大/NaN)。
- 尾数位(Mantissa Bits):剩下的23位(第22位到第0位)是尾数位,用于表示数的精确部分。在单精度浮点数中,尾数位实际上表示的是小数点后的部分,因为整数部分(即1)被隐含了(除非是特殊值,如0或非规格化数)。
特殊值
- 零:当指数位和尾数位都为0时,表示零。符号位可以是0或1,因此有正零和负零之分。
- 无穷大:当指数位为255且尾数位为0时,表示无穷大。符号位可以是0或1,因此有正无穷大和负无穷大之分。
- NaN(Not a Number):当指数位为255且尾数位不为0时,表示NaN。NaN用于表示未定义或不可表示的值。
问题4:汉字编码
学习内容4:
区位码、国标码和机内码是汉字信息处理中常用的三种编码方式,它们之间有着密切的关系和转换规则。
- 区位码:
- 区位码是一个四位的十进制数,由区码和位码组成。区码是前两位,位码是后两位。区位码用于汉字的输入,它将汉字排列在一个94行94列的矩阵中,每一行称为一个“区”,每一列称为一个“位”。
- 国标码:
- 国标码,全称国家标准汉字信息交换码,是一个四位的十六进制数。它是中国国家标准局1981年发布的《信息交换用汉字编码字符集(基本集)》中规定的编码,用于统一汉字的编码标准。
- 机内码:
- 机内码是汉字在计算机内部的表示方式,也称为汉字ASCII码。为了避免与ASCII码产生冲突,国标码的每个字节的最高位被设置为1,形成机内码。
三者之间的关系和转换规则如下:
- 机内码是汉字在计算机内部的表示方式,也称为汉字ASCII码。为了避免与ASCII码产生冲突,国标码的每个字节的最高位被设置为1,形成机内码。
- 从区位码到国标码:
- 区位码的两个字节(区码和位码)分别转换为十六进制后,各自加上
2020H
(即十六进制的20
),得到对应的国标码。
- 区位码的两个字节(区码和位码)分别转换为十六进制后,各自加上
- 从国标码到机内码:
- 国标码的两个字节分别加上
8080H
(即十六进制的80
),得到对应的机内码。 - 另一种转换方法是将国标码的每个字节的最高位加1,也就是加上
80H
,得到机内码。
- 国标码的两个字节分别加上
- 从区位码直接到机内码:
- 区位码的两个字节分别转换为十六进制后,加上
A0A0H
(即十六进制的A0
),得到对应的机内码。
举例说明,如果有一个汉字的区位码是2083
:
- 区位码的两个字节分别转换为十六进制后,加上
- 首先将区位码转换为十六进制,得到
1453H
。 - 然后加上
2020H
,得到国标码3473H
。 - 最后加上
8080H
,得到机内码B4F3H
。
这些编码和转换规则是汉字信息处理的基础,确保了汉字能够在不同的计算机系统和输入法之间正确地存储、处理和传输。
基于AI的学习
缓冲区实验问题和解决过程
问题1:文件stack.c编译错误
解决方案:vim+i检查修改文件,发现退出文件时未从插入模式退回到普通模式从而留下字符导致错误,删去即可
问题2:gdb使用失败
解决方案:使用命令sudo apt install gdb下载
问题3:粘贴大段代码时混在一起,没有换行、缩进
解决方案:AI学习命令:set paste,dd以格式化粘贴和高效删除
问题4:练习内容中攻击无法获得权限
解决方案:gdb反汇编
- 计划学习时间:5小时
- 实际学习时间:7小时