20145240 《信息安全系统设计基础》第三周学习总结
20145240 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
p20
三种数字:
无符号数:基于传统二进制表示法,表示大于或者等于零的数字。
补码:表示有符号整数的最常见方式。
浮点数:表示实数的科学计数法的以二为基数的版本。
为什么会产生漏洞?
- 计算机运算的漏洞多由于计算机算数运算的微秒细节引发的。
p22
进制转化:
- x=2^n转化为十六进制
将x写成x=2^n的形式,令n=i+4j,x的十六进制表示为:开头为2^i的值,后面补j个0。
- 十进制转化为十六进制
十进制数x反复除以16,得十六进制数
- 十六进制转化为十进制
十六进制数x反复乘以16,得十进制数
p25
- gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码
p26
字和字节顺序:
- 字长:一个字长指明整数和指针数据的标称大小。字长决定最重要的系统参数就是虚拟地址空间的最大大小。对一个字长为w位的机器而言,虚拟地址的范围是0~2^w-1,程序最多访问2^w个字节。
对于跨越多字节的程序对象需建立两个规则:
小端法:高对高,低对低
大端法:从视觉上,是这次阅读的顺序,与小端法相反。 使字节顺序变得可见的三种方式: 不同类型的机器之间通过网络传送二进制数据时,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则;使用反汇编器,处理整数数据的字节序列的存储字节顺序问题;当编写规避正常的类型系统的程序时。
p28
p32
位向量的运算:按位运算
位向量的应用:表示有限集合
掩码表示的是设置为有效信号的集合。
位级运算
|:或 &:与 ~:取反 ^:异或
逻辑运算
逻辑运算符:||(或)、&&(与)、!(非) 逻辑运算认为所有非零的参数都表示TRUE,参数0表示FALSE。返回1或者0,分别表示结果为TRUE或FALSE。
逻辑运算和位级运算的区别是:
按位运算只有在特殊情况下,即参数被限制为0或者1时,才能与其对应的逻辑运算有相同的行为;
若第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。
移位运算
左移k位:丢弃最高位的k位,右端补k个0 右移包括:逻辑右移、算数右移 逻辑右移:左端补k个0(常用于无符号数) 算数右移:左端补k个最高有效位的值(用于有符号数)
p33
- 掩码是位运算的重要应用,对特定位可以置一,可以清零。
p38
- 要用C99中的“long long”类型,编译时要用
gcc -std=c99
p39
补码形式是最常见的有符号数的计算机表示方式:
将字的最高有效位解释为负权 B2T(W)函数为:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和从i=0到i=w-2)
p44
有符号数和无符号数之间的转换:
- 处理同样字长的有符号数和无符号数之间相互转换的一般规则:
数值可能会改变,但是位模式不变。
c语言允许无符号数和有符号数之间的转换。转换的原则是底层的位表示不变。
当从无符号数转换为有符号数是,效果是应用函数U2T,从有符号数转化为无符号数时,应用函数T2U,其中w表示数据类型的位数。
负数和正数相等的情况:u=2147483648 =-2147483648
(当输出分别为无符号形式和有符号形式时)
p48
怎么样让负数等于正数?
- 在负数x后加上U,可以使其转换为(2^w+x)
p49
扩展数的位表示:
零扩展:将无符号数转换为更大的数在表示的开头添加0
符号扩展:将一个补码数字转换为一个更大的数据类型
p52
深入思考一下代码和结果:
length=0时会出现存储器错误,这是因为参数length是无符号的,计算0-1将进行无符号运算,等价于模数加法,结果得到UMax。因为任何数都是小于等于UMax的,所以<=比较总是为真,代码将访问数组a的非法元素。
解决办法:
1.将length声明为int类型 2.将for循环测试条件改为i>length
p67
整数运算
无符号加法
无符号运算可以被视为一种模运算形式,无符号加法等同于计算和摸上2^w,可以通过简单的丢弃x+y的w+1位表示的最高位,来计算这个数值。 一个算数运算的溢出,是指完整的整数结果不能放到数据类型的字长限制中去。
补码加法
两个数的w位补码之和与无符号之和有完全相同的位级表示。大多数计算机用相同的机器指令来执行无符号或者有符号加法。
补码的非
对于范围-2^(w-1)≤x<-2^(w-1)内的x,补码的非运算如下:
x=-2^(w-1):补码的非为-2^(w-1)x>-2^(w-1):补码的非为-x
求位级补码非的方法:
对每一位求补,再对结果加1 建立在将位向量分为两部分的基础之上的
无符号乘法
两个数x、y相乘且x、y的位数为w,则结果的位数为2w。
补码乘法
同无符号乘法。 若为截断后的结果,则取结果的后w位作为计算结果。注意:无符号运算和补码运算在“+”、“-”、“*”在位级上有相同的结果。
关于整数运算的最后思考
计算机执行的“整数”运算实际上是一种模运算形式;表示数字的有限字长限制来了可能的值的取值范围,运算结果可能溢出;补码表示提供了一种即能表示负数也能表示正数的灵活方法,同时使用了与执行无符号算术相同的位级实现; c语言中的unsigned数据类型的使用也应当特别注意,比如,在书写整数常数和调用库函数的时候。
p67
浮点数:
- 二进制小数
将十进制小数转换为二进制小数 :
首先,将十进制小数写成分数的形式,将分数的分子部分,写成二进制的形式;将分数的分母部分写成2^n的形式,将分子的二进制形式,从右往左数,数n位添加小数点。
小数点左移:除以2 小数点右移:乘以2
- IEEE浮点数表示
表示形式为:V = (-1)^s * M * 2^E
符号:s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。
阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。
根据阶码的值,可分为一下三种情况:
情况一:规格化的值 (当阶码字段不全为0或全为1时)
E = e-Bias
Bias = 2^(k-1)-1
M = 1+f 情况二:非规格化的值 (当阶码字段全为0时)
E = 1-Bias
Bias = 2^(k-1)-1
M = f情况三:特殊值 (当阶码字段全为1时)
当小数域全为0时, 当s=1时,为-∞;当s=0时,为+∞。
当小数域不全为0时,为NaN。
- 浮点数的舍入
有四种情况分别是:
向偶数舍入(默认)向零舍入向下舍入向上舍入
浮点运算
浮点加法:不满足结合性、满足单调性 浮点乘法:不满足结合性、满足单调性,在加法上不满足分配性
教材学习中的问题和解决过程
课后练习题
练习题2.4
0x503c+0x8 = 0x5044 0x503c-0x40 = 0x4ffc 0x503c+64 = 0x50a1 0x50ea-0x503c=0xae
练习题2.6
写出0x00359141、0x4a564504的二进制表示:
0x00359141 = 0000 0000 0011 0101 1001 0001 0100 0001
0x4a564504 = 0100 1010 0101 0110 0100 0101 0000 0100
- 练习题2.8
a = [01101001],b = [01010101]。计算:
~a = [10010110]
~b = [10101010]
a&b = [01000001]
a|b = [01111101]
a^b = [00111100]
本周代码托管链接
http://git.oschina.net/20145240lsj/lsj20145240/tree/master/
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 20/20 | |
第二周 | 300/500 | 1/2 | 18/38 | |
第三周 | 200/7 00 | 1/3 | 22/60 |
参考资料
- 《深入理解计算机系统V2》学习指导
- ...
转载于:https://www.cnblogs.com/20145240lsj/p/5928166.html
20145240 《信息安全系统设计基础》第三周学习总结相关推荐
- 信息安全系统设计基础第三周学习总结
信息的表示和处理 一.gcc 编译 使用C99特性时 gcc -std=c99 xxx.c 实验楼环境为64位,编译为32位机器码: gcc -m32 xxx.c 二. 教材导读 三种数字: 无符号( ...
- 信息安全系统设计基础第三周学习总结—20135227黄晓妍
一.Vim编辑器 1.Vim的六种模式 2.Vim三种常用模式的使用方式,以及三者的切换.打开Vim即默认进入普通模式,按i进入插入模式,按esc从插入模式退出普通模式,再按:进入命令行模式. 普通模 ...
- # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...
- 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结
- 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...
- 20135203齐岳 信息安全系统设计基础第十三周学习总结
20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...
- # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结
20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...
- 20135219洪韶武——信息安全系统设计基础第五周学习总结
信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时 一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...
- 20145227《信息安全系统设计基础》第一周学习总结
20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...
- 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...
- 2017-2018-1 20155228 《信息安全系统设计基础》第一周学习总结
2017-2018-1 20155228 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 一.在linux环境下编程 (一)用vi编写hello.c的C语言程序 编译程序得到a. ...
最新文章
- 安防行业成巨头必争之地 一文梳理安防AI芯片产品与主要企业
- 关于肥胖和美国为什么那么多胖子
- oracle分页性能不同,oracle高效分页
- BRCM5.02编译七:No package 'uuid' found
- android按钮最底,Android:点击按钮后布局上的动画,最低SDK版本为14
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- MFc消息映射机制理解
- Flutter入门进阶之旅(二)Hello Flutter
- 2010年初的一点随想
- linux主机ip数据包抓取,tcpdump和ngrep抓不到本机数据包
- 跨域——vue中的axios.post使用json数据传输,出现请求头字段内容类型是不被允许的情况的解决方案
- termux无法安装引导程序包_Windows 10出现升级BUG:无法保留用户个人数据
- opencv下载百度网盘链接及安装
- 在同一窗口能显示多个幻灯片_如何让两个PPT文件在电脑屏幕中同时显示
- 重邮第八届ACM大赛-决赛题解报告
- Vue模板挂载到页面源码简要解析
- 【怎样制作ppt课件】Focusky教程 | 设置插入的视频循环播放
- TwinCAT3 设置断电保持变量
- Graphite的安装与部署
- ubuntu添加并查看 用户组和用户
热门文章
- 浏览器 刷新页面后回到顶部_JavaScript仿知乎回到顶部功能
- python的out模式_如何用python中的DataFrame列的模式替换NA值?
- 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...
- python常用运维模块_python常用模块之一
- C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
- java中b的平方表示_第七届蓝桥杯Java B——四平方和
- mysql linuxl环境搭建_Linux环境下的MySQL搭建
- python自启动 绕过360_记录一次绕过杀软的过程
- eclipse下的tomcat内存设置大小
- Linux系统自启动脚本