20145203 《信息安全系统设计基础》第三周学习总结
第2章 信息的表示和处理
1、信息存储
计算机最小的可寻址的存储器单位——字节
一个字节的值域:00H-FFH
2、进制转换
常用进制:二进制(B),十进制(D),八进制(O或者Q),十六进制(H)
转换为二进制-十六进制相互转换,二进制的四位数字对应十六进制的一位数字。
二进制与八进制的转化是三位对应一位。
通常情况下,进制转换都以二进制为桥梁进行转换。
3、字
字长决定虚拟地址空间的最大大小。
字长为w,虚拟地址的范围为1-(2^w-1)
w=32或64:也就是我们通常所说的电脑是32位还是64位。
4、小端法和大端法
* 小端法:最低有效字节在前面——“高对高,低对低”
* 大端法:最高有效字节在前面
注意:
有效位的高低的判断:
以0x01234567为例,每个字节为8bit所以2个十六进制位为1个字节,即划分为01,23,45,67;在最前面的为最高有效位,最后面的为最低有效位,所以最高有效位-01,最低有效位-67。
大端法:
最高有效位在最前,所以为01 23 45 67
小端法:
最低有效位在最前,所以为67 45 23 01
但是字节内部的顺序是不变的!以前在学汇编的时候经常犯这种错误!理解最高/低有效位的含义!
所以在书写小端法的字节序列时,最低有效位在左边,最高有效位在右边,与惯常书写方法相反。
5、无符号数的编码
0-(2^w)-1中的每一个整数和长度为w的位向量是一一对应的
6、强制类型转换
从位级角度考虑。
强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。即:这些位上的值不变,但是由于最高有效位的权重发生变化,从而导致结果发生改变。
7、c语言中的有符号数和无符号数及其转换
转换原则:底层的位保持不变。
(1)有符号数→无符号数
* 非负数——保持不变
* 负数——转换成大正数
(2)无符号数→有符号数
以2的w-1次方为界限:
* 小于它——保持不变
* 大于它——转换为负数值
8、扩展
扩展——从一个较小的数据类型转换为较大的数据类型,同时保持数值不变。
①零扩展
多用于无符号数转换为一个更大的数据类型。只需在开头加上0即可。
②符号扩展
多用于补码数字转换
最高有效位是什么,就添加什么。
注:无符号和有符号数字之间的转换,和数据的大小的转换,这之间的相对顺序能够影响到一个程序的行为。具体见联系2.23。
9、截断数字
不用额外的位来扩展数值,而是减少表示一个数字的位数。而这么做可能会改变它的值,这也是溢出的一种形式。
将一个w位的数截断为k位数字时,就会丢弃高w-k位。
对于无符号数来说,就相当于 mod 2的k次幂
对于有符号数来说,先按照无符号数截断,然后再转化为有符号数
具体的公式参见书52页。
10、关于适用范围:
无符号数适用于没有任何数字意义的位的集合,比如地址;又或者实现模运算、多精度运算的时候,数字由字的数组表示的时候。
编程中多用有符号数。
11、整数运算的总结
* 计算机执行的“整数运算”实际上是一种模运算。
* 无论运算数是以无符号形式还是补码形式表示,都有完全一样或者非常类似的位级行为。
* 在编写c语言程序时需要谨慎食用unsigned数据类型,很可能会造成漏洞。
T托管代码截图
总结
以往写博客虽然也是在接触新知识,但是比较容易理解和接受。但是这次的博客从新的角度去刷新我们对于旧知识的理解,而且涉及的内容比较深,所以感觉非常难理解。很多琐碎的细节需要自己去注意,并且要不断的实践,不断地在失败加深记忆。不过学完之后,真的感觉自学学到的东西和听老师讲课学到t的东西是不一样的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 150/150 | 1/2 | 20/20 | |
第二周 | 200/350 | 1/2 | 24/44 | |
第三周 | 150/500 | 1/3 | 20/64 |