这一块也是非常的重要和基础,非常容易得分,但也非常容易错。
所以我今天决定把这些知识点稍微过一遍,如果我已经熟记于心的一些东西我就会提一嘴,如果大家对于这些问题有所疑问,可以留言,也可以自行再百度学习。
基础知识
首先就要具备一些相关的知识背景,我大概想到的就说一下如果有所缺漏就自行补足。
进制转换
1.十进制、二进制、十六进制相互转换
2.整数、小数十进制转二进制。
ps:我之前写题的时候不是很理解二进制该如何转换成十进制的小数,趁现在这个功夫学习了一下,其实也就是对位相乘,只不过乘的是负次方,验算结果是对的。数为0.875
特殊码制
说到特殊码制我觉得更多的应该是区别于BCD码,BCD码最大的特点应该就是BCD码是用4位二进制码表示一个十位数,而与进位和加和无关…我怎么突然不会说话了,突然就不知道该怎么解释了。
我用一个例子最清晰的表达吧。
就是 BCD码转的时候不用考虑进位
定点数浮点数表示
什么是定点数,就是小数点确定,不变的数,与之相对应的就是小数位会变动的浮点数。
定点小数/定点整数
定点小数就是纯小数,小数点位置在符号位之后,小数之前
定点整数就是纯整数,小数点位置在个位之后
原码、补码、反码、移码
关于这几种码制需要掌握原码到这些码该怎么变。
原码 | 补码 | 移码 | |
---|---|---|---|
正数 | x | x | x+偏置常数 |
负数 | x | 符号位不变,数值取反,末位加一 | x+偏置常数 |
相关问题
十进制转浮点机器数
在题目中可能会给到机器数的表示格式,给出一下几个量,我们在此介绍一下
数符:表示该数的正负
阶符:表示阶数的正负,如果是正阶,例如2次方就直接可以拿来拿来跟阶码一起并用
阶码:用来存储阶数。一定要记住如果题目中偏置常数且阶码用移码表示,一定不要忘记加上偏置常数(我踩过的坑)
尾数:小数位二进制
题目设置方式一般是给你一个格式,给一个十进制数,让你转成浮点机器数:
方法论如下
把十进制数化成二进制 |
---|
规格化 |
对应写成机器数 |
根据这个方法我们对这个数进行操作
首先把十进制数化为二进制数
顺便补一下前面的一些操作,供大家对照
然后我们进行规格化
规格化法则:
如果尾数用原码规格化
正数:0.1xxxx形式
负数:1.1xxxx形势
补码规格化
整数:0.1xxxx形式
负数:1.0xxxx形式
根据这个法则来看,10000000.11由于是整数,应该要将小数点移到第一个1的前面,移位8位,即阶码-2+8=6
结果为0.1000000011*2^6
规格化之后我们就可以对应的写成机器数
数符-正数=0
阶符+阶码=6+16(偏置常数)=22-10110
尾数=1000000011
整体为0101 1010 0000 0011 0000-5A030H
机器数加减
既然我们已经可以转成机器数,这个时候顺理成章发生的一件事情就是我们有了另一个机器数,就可以加减了!
但是通常我们的两个机器数阶数会不一致,这个时候我们关于这类题目的处理方式就会有所增加
方法论如下
对阶 | 使两个操作数的小数点位置对齐(小向大对齐) |
---|---|
尾数求和 | 对阶后的尾数相加减 |
规格化 | 按正常规格化进行 |
舍入(针对尾数) | 如果尾数溢出就需要舍入 |
溢出判断(针对阶数) | 不要加偏置常数进行判断是否溢出 |
我们在之前的5A030H基础上再加一个机器数D9F00H,让其进行机器数相加
1.化浮点数
这个时候我们发现与之前的0.1000000011*2^6阶数相等故不需要对阶
接下来直接进行尾数加和
进行舍入判断时发现尾数此时并没有超出14位,无需舍入
同时溢出判断,6位阶码也没有溢出,没有溢出
直接写成机器数即可-答案为C0C00H