规格化:

不论补码还是原码表示法,均是小数,其中小数点前一位是符号位,后面才是数值最高位

左规,一般情况不论原码还是补码均是补0,同时阶码变小,因为小数点右移

在因为右移导致一些有效位出去的情况下,需要把有效位保留并移动回原来的数内

左规这里不需要担心溢出,因为顶多是下溢,机器是将其视作为零的

右规,指代尾数有效位进位到小数点前,可能导致符号位的溢出,同时也需要保留进位

右规是指代小数点左移,会导致阶码变大

进行一次全体右移,把原符号位补回,同时需要进行两个判断

第一个就是是否右规导致阶码溢出,如果溢出那么就没救了,直接不用干了

第二个就是因为右规会有低位的舍弃,此时需要进行舍入,可能也会导致尾数变大进位

这时候就可能再次右规,可能又会产生阶码的溢出

简单来说,就是数值位溢出其实没什么事情,可以依靠阶码变大来弥补

如果阶码溢出,那么是真没救了

注意下补码、原码的规格化判断有一定的不同,主要在于数值位的表示法上

另外注,基数不同的情况下的特殊处理

首先就是基数扩大,那么每次移动的位数自然也会变化,也要看是几进制的数再说

基数扩大,那么最终规格化的表示也会有所不同,但核心应该是一样,就是阶码再进一位

那么就会导致尾数的溢出

例如0.01、0.10、0.11,在基数为4的情况下,再度进行移动就会溢出(向前移动两位

0.001这类,在基数为8的情况下,再度进行前移一个阶码(3位,就会溢出

规格化的目的其实就是在能够存得下的情况下,使得最高有效位是一个有效数字

在对阶里面右规出去的是不舍弃的,依旧进行保留,包括左边进位出去的也是保留的

例题1:

例题2:

此时的B就很明显导致了一位的溢出无法存储,但如果规格化就能解决这个问题

双符号位的规格化解释例题:

IEEE模型特殊性:

注:IEEE特殊实际上在于其定下阶码用移码存储,尾数用原码表示

且移码的偏移量是规定为2^7-1,2^10-1,依据单双精度区分

同时尾码的数值位最高位采用的是隐含第一位的取法(因为第一位一定是1

阶码的移码表示,注意其不同于补码、原码,是真值加上偏移值得出的机器数

因而假如要得出其值,那么就是安心求出机器码,然后减去偏移量得出真值

没有符号位这一说法的

对于小数的原码存储法,那么就是.XXXXX….没有符号位的存储位在,共23/52位

但需要注意其特殊性就在于数值位隐含了第一位,所以在反求其值的时候,需要把1带回

然后即为原码求法,同样,IEEE里面的尾数也是没有符号位的,符号位在最开头

只能说是以正数的原码形式存储,同时应是没有存储小数点前一位的,只有小数点后

所以通过尾数求值,直接补上第一个一,然后求这个1.XXXX的值是多少,XXX是尾数

注,考试大概率并不考察IEEE,基本是以选择的方式来考察,不会考模拟

所以几个特性需要清晰:

首先就是阶码表示范围是多少,再就是真值的表示范围是多少

其结构是怎么样的,要会分析

十进制转换例题(最少也有三十二位,你写那么多个0试试

这个也是十六位表示法,写成二进制不敢想象

这里就是其表示范围

另外特别注意一些特殊表示法的含义(记忆为主,理解为辅:

而且正是因为有了这些特殊解释的原因,正常所能得到的阶码最高值是254、2046

浮点数的加减运算(IEEE模型、其他模型):

首先根据一般的十进制浮点数的加减法的过程引出方法

首先是需要把同类型(计算机、考察一般都是补码,很少用原码考察)用码值表示出来

这里可以提前观察是加法还是减法,如果需要是减法直接把Y改为-Y补码展现

注意尽可能写出来规格化的状态,这样后续也方便计算的

然后阶码其实根本没必要急着就写掉,完全可以最后一步写,这样方便

然后注意表达出来以后就要进行阶码的对齐,遵循小向大靠的原则,小阶码扩大

同时小阶码所对应的尾数部分右移一位,然后这里注意,因为是不同的码态

对于补码而言,分正负的

正的不论左移还是右移,低位、高位补的均是0

对于负数而言,左移低位补的是0,右移高位补的是1

当然在浮点数加减法内只谈论右移而不会考虑左移的可能性,因为左移不被允许

另外,如果在低位右移出后,需要把这个低位保留下来而不是直接去除,需要注意

如果是原码,那么就是高位补的0,也没有什么特别需要说的,也是保留低位

然后在对齐了以后,开始进行尾数的加减法(减法就是取另外一个数的-x补进行加法

IEEE中需要特别注意尾数前面还有一个隐藏位,其他的比较佛系但也要看情况

在一般情况,都会给定数符几位、尾码几位的,而不是和IEEE一样在尾码没有数符位

同时最高位还是隐藏的,不一样,要区分

写法可能就是.11111与11.111111的差别之分了,对于IEEE我也是刚刚才意识到

在加减中对高位的进位也是需要保留,否则后续就没有办法规格化

进行加减后,就要再度进行规格化

规格化就更加麻烦一些,需要根据补码、IEEE、原码三种情况进行区分

IEEE最好写做双符号位,因为数值位第一位是会隐藏的,第一位符号位,第二位数值最高

补码、原码的话按照这个准则,我只能说非常容易做错,第一位是作符号位

注意最终必须要规格化到原码、补码相对应的规格化状态,不能出现一点不符合的

右规倒还能搞清楚,只需要保证符号位、最高位回归原位就行

左规就有点难以记住,但一定要参考这个状态去做,其实现在也可以理解

如果产生了符号位进位和最高位进位不同的情况,即双符号位一个1一个0,那么就溢出

那么就是要卡着这个溢出点:1.01XXXX…

右规是小数点左移,阶码扩大,左规是小数点右移,阶码减小

可能需要进行左规或者右规,右规往往是尾码溢出,这边会有个符号位也顺便被进位丢出

这个是不能丢的,和之前一样,需要保留下来,在右规的时候重新放回去

这里就要去判断这边有没有可能产生阶码的溢出

同时最后移除的一位也可能并不是0,或者一开始对阶的时候就有多余项,需要舍入处理

舍入处理自然是可以有多种的,具体看题目的选择,书上几个需要知道记住的

在舍入后,同样需要考虑是否会产生进位,再度右规阶码溢出的问题

总体来说是非常麻烦的,建议多加训练、观阅

左移、左规,尾数增大,只考虑数值位的移动,阶码因而减小,小数点后移

右移、右规,尾数减小,只考虑属植物的移动,阶码因而扩大,小数点前移