20165214 2018-2019-1 《信息安全系统设计基础》第2周学习总结
教材学习内容总结
- 无符号数、补码、浮点数是我们研究的最重要的三种数字表示。其实注意的是,补码编码是表示有符号整数最常见的方法,在计算机中负数都是用补码的形式来存储的;浮点数以二为基数。
- 计算机满足整数运算的一些定律(如分配率等)。
- 由于表示的精度有限,浮点运算是不可结合的(书中举例P20)。
- 每个计算机都有一个字长,指明整数和指针数据的大小。
- 大多数Inter兼容机都采用最低有效字节在最前面的方式来进行顺序存储,即小端存储。
- C语言允许在各种不同数据类型之间做强制类型转换。但要注意,将负数转换为无符号数可能会得到0,且强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。
- C语言支持所有整数数据类型的有符号和无符号运算,大多数数字都默认为是有符号的,所以要创建一个无符号常量,必须要就爱上后缀字符“U”或者‘u’,如123U。
- 零扩展和符号扩展:零扩展应用于无符号整数,符号扩展应用于有符号整数。
- 截断数字:与扩展相反,截断是用来减少一个数字的位数。截断时,抛弃高位。对于一个x位的数字,要截断为y位,就抛弃了高x-y位。也就是相当于xmod2的y次方。
- 有符号数和无符号数的转换经常会导致程序出错而又不容易被发现,因此编程时一定要注意。
- 学会进制转换(之前学过,也较为简单,不再赘述)
- 无符号数和补码的乘法一样,除法都是进行移位。无符号数的除法移位后补0,补码的除法移位后补1。
- 区分位运算和逻辑运算的区别与运算方法。
- 逻辑右移:>>>,算数右移:>>
- 无符号二进制数和有符号二进制数转换为十进制时差别在于最高位的符号位是“+”还是“-”
- 数字在计算机中的表示只能通过2的次方来表示。
教材学习中的问题和解决过程
- 问题1:C语言是支持所有整数数据类型的有符号和无符号运算,那么在JAVA中又是怎么样的呢?
- 问题1解决方案:娄老师在课上的回答解决了我的疑问:Java中的数都是有符号的。
上周考试错题总结
- 错题1:多线程的C程序中,下面变量()是线程安全的。
A .全局变量
B .本地自动变量
C .本地静态变量
D .以上都不是 - 我选择了D,应该选择B
其他(感悟、思考等,可选)
由于上周时间紧迫,导致一些上周的任务没有完成,很是遗憾,所以这周我除了完成本周的学习任务之外,还把上周缺的东西补上了:在上一篇博客中,我补上了知识点的总结,补上了测试6Makefile的任务,感觉收获了不少东西,也算是把之前落下的给补上了。今后也会继续努力,争取走在教程的前面。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 63/63 | 1/1 | 7/7 | |
第二周 | 100/163 | 1/2 | 15/22 |
-
计划学习时间:20小时
-
实际学习时间:15小时
-
改进情况:
学习时间比上周要长了很多,效率也提高也不少。