2017-2018-1 20155302 《信息安全系统设计基础》第3周学习总结
2017-2018-1 20155302 《信息安全系统设计基础》第3周学习总结
教材学习内容总结
信息存储:
机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器(virtual memory)。存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合称为虚拟地址空间(virtual address space)。
十六进制、十进制以及二进制之间的转化规则
以我自己对其的理解以及掌握的运算方法如下:
十进制转二进制:
整数部分:把十进制数的整数部分除以2,余数(1或者0)作为二进制整数部分的最低位,再把商除以2,余数放在前一步的高一位,以次类推。小数部分:把十进制数的小数部分乘以2,得到的结果的整数(1或者0)部分作为二进制小数部分的最高位,再把去年整数部分的小数部分乘以2,得到的结果的整数部分放在前一步的低一位,以次类推。
二进制转十进制:从左往右依次乘以2的相应的次方,注意小数点左边第一位是2的零次方,小数点右边第一位是2的负一次方,后面的以此类推。
而二进制转十六进制的方法简而言之就是“合四取一”,从二进制串最右端开始每四个数合并成一个16进制数左边不够四位时补0。
十六进制转二进制也是相反的道理,把每个十六进制数字拆成4个二进制数字即可。
Linux> gcc -m32 xxx.c(该程序可以在32位或64位机器上正确运行)
Linux> gcc -m64 xxx.c(该程序只能在64位机器上运行)
有一些机器,按照从低有效字节到高有效自己的顺序存储对象,称为小端法。另一种从高字节都最低有效字节,称大端法。
位运算符C语言提供了六种位运算符:
& 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移
整数表示:无符号数编码的定义(B2Uw)
补码编码的定义(B2Tw)
补码转换为无符号数 对满足TMinw≤x≤TMaxw的x有:
推导:补码转换为无符号数
无符号数转换为补码 对满足0≤u≤UMaxw的u有:
推导:无符号数转换为补码
浮点数:二进制小数的运算也和十进制小数运算相类似,差别在于这里是“逢二进一”,“退一还二”. 十进制小数化为二进制小数,主要通过分数作中间媒介
IEEE浮点表示法:float 共计32位(4字节) 由最高到最低位分别是第31、30、29、......、0位 31位是符号位,1表示该数为负,0反之 3023位,一共8位是指数位(-128127) 22~ 0位,一共23位是尾数位 每8位分为一组,分成4组,分别是A组、 B组、 C组、 D组 每一组是一个字节,在内存中逆序存储,即: DCBA
浮点表示通过将数字编码为x*2^y的形式来金丝的表示实数。最常见的浮点表示方式是由IEEE标准754定义的。他提供了几种不同的精度,最常见的是单精度(32位)和双精度(64位)。IEEE浮点也能够表示特殊值正无穷、负无穷和NaN。
教材学习中的问题和解决过程
Q :关于浮点数的一些问题:浮点数数据类型没有有符号和无符号之分,那他们该如何进行比较并进行移位操作呢?
A :浮点型具有固定的编码方式,本来就是存在正负之分,即没有unsigned float之说。需要注意的是浮点型是一个近似的值不能用来比较。还有对float类型数据不能进行移位操作,因为float是有固定的编码方式的不像整形数据。
代码调试中的问题和解决过程
此代码段存在错误原因是参数length无符号,只能进行无符号运算<=比较时同样是无符号比较,任何数都小于等于模加加法的值,所以恒成立,访问非法元素。
改正为:
或者:
代码托管
https://gitee.com/bestiisjava2017/yxc20155302
其他(感悟、思考等,可选)
本周学习章节内容繁多但一部分进制转换的内容以及补码反码等内容在以前的课程中都已学过有所接触,
但其中有符号数和无符号数的计算以及转换,还有反码编码和浮点数的计算及定义还是颇为难以理解的,需要在课下付出更大的努力和更多的时间投入到这章的学习中。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)