2017-2018-1 20155338 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
一、三种重要的数字表示
(1)无符号数、有符号数、浮点数
无符号编码是基于传统的二进制表示法,表示大于或者等于零的数字。
浮点数编码就是表示实数的科学计数法的以2为基数的版本。
有符号数即二进制补码。
正数的原码、反码以及补码是其本身。
负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。
(2)为什么用补码表示
能够统一+0和-0的表示
采用原码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 000 0000;
采用反码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111;
采用补码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111+1=1 0000 0000,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为0000 0000。
补码的表示范围比原码和反码表示的范围都要大。用补码能够表示的范围为-128127,0127分别用0000000001111111来表示,而-127-1则用10000001~11111111来表示,多出的10000000则用来表示-128。
一些需要了解的概念
(1)字
每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w字节。
(2)gcc -m32/64
当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码
gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
(3)字节顺序
字节顺序是网络编程的基础,是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
(4)布尔代数
逻辑运算:
结果是1或0
所有逻辑运算都可以用与、或、非表达(最大式、最小式)而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
数据类型转换中的陷阱和可能会导致的漏洞
数据类型中的转换转换一个固定的长度,存储的最大值是固定的,当尝试去存储一个大于这个固定的最大值时,将会导致一个溢出。
溢出将会导致"不能确定的行为"。没有办法去用一个应用程序来判断先前计算的结果在实际上是否也是正确的,所以可能导致某些类型的bugs,缓冲区溢出等。
教材学习中的问题和解决过程
-
问题1:如何检查补码加减法中的溢出问题
-
问题1解决方案:
1、 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出.
2、两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出.
3、在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出.01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢"。
代码托管
上周考试错题总结
-无
结对及互评
本周结对学习情况
- [# 2017-2018-1 20155338 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
一、三种重要的数字表示
(1)无符号数、有符号数、浮点数
无符号编码是基于传统的二进制表示法,表示大于或者等于零的数字。
浮点数编码就是表示实数的科学计数法的以2为基数的版本。
有符号数即二进制补码。
正数的原码、反码以及补码是其本身。
负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。
(2)为什么用补码表示
能够统一+0和-0的表示
采用原码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 000 0000;
采用反码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111;
采用补码表示:
+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111+1=1 0000 0000,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为0000 0000。
补码的表示范围比原码和反码表示的范围都要大。用补码能够表示的范围为-128127,0127分别用0000000001111111来表示,而-127-1则用10000001~11111111来表示,多出的10000000则用来表示-128。
一些需要了解的概念
(1)字
每个计算机都有一个字长,指明整数和指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长最重要的系统参数就是虚拟地址空间的最大大小。
对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w字节。
(2)gcc -m32/64
当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码
gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
(3)字节顺序
字节顺序是网络编程的基础,是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
(4)布尔代数
逻辑运算:
结果是1或0
所有逻辑运算都可以用与、或、非表达(最大式、最小式)而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
数据类型转换中的陷阱和可能会导致的漏洞
数据类型中的转换转换一个固定的长度,存储的最大值是固定的,当尝试去存储一个大于这个固定的最大值时,将会导致一个溢出。
溢出将会导致"不能确定的行为"。没有办法去用一个应用程序来判断先前计算的结果在实际上是否也是正确的,所以可能导致某些类型的bugs,缓冲区溢出等。
教材学习中的问题和解决过程
-
问题1:如何检查补码加减法中的溢出问题
-
问题1解决方案:
1、 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出.
2、两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出.
3、在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出.01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢"。
代码托管
上周考试错题总结
-无
结对及互评
本周结对学习情况
结对学习内容
- 三种重要的数字表示
- 布尔代数
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 15篇 | 200小时 | |
第一周 | 150/150 | 1/1 | 17/17 | |
第二周 | 70/220 | 1/2 | 12/29 | |
第三周 | 100/320 | 1/3 | 10/39 |
-
计划学习时间:15小时
-
实际学习时间:10小时
]()
- 结对学习内容
- 三种重要的数字表示
- 布尔代数
- ...
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 15篇 | 200小时 | |
第一周 | 150/150 | 1/1 | 17/17 | |
第二周 | 70/220 | 1/2 | 12/29 | |
第三周 | 100/320 | 1/3 | 10/39 |
-
计划学习时间:15小时
-
实际学习时间:10小时