正则表达式和EXCESS系统

正则表达式和EXCESS系统,尾数部分使用正则表达式,可以将表现形式多样的浮点数统一为一种表现形式。例如,十进制数0.75就有很多种表现形式,如图3-5所示。虽然它们表示的都是同一个数值,但因为表现方法太多,计算机在处理时会比较麻烦。因此,为了方便计算机处理,需要制定一个统一的规则。例如,十进制数的浮点数应该遵循“小数点前面是0,小数点后面第1位不能是0”这样的规则。根据这个规则,0.75就是“0.75×10的0次幂”,也就是说,只能用尾数部分是0.75、指数部分是0这个方法来表示。根据这个规则来表示小数的方式,就是正则表达式。

正则表达式和EXCESS系统
图3-5 浮点数可以用不同的形式来表现同一个数值

刚才以十进制数为例进行了说明,二进制数也是同样的道理。在二进制数中,我们使用的是“将小数点前面的值固定为1的正则表达式”。具体来讲,就是将二进制数表示的小数左移或右移(这里是逻辑移位。因为符号位是独立的)数次后,整数部分的第1位变为1,第2位之后都变为0(这样是为了消除第2位以上的数位)。而且,第1位的1在实际的数据中不保存。由于第1位必须是1,因此,省略该部分后就节省了一个数据位,从而也就可以表示更多的数据范围(虽不算太多)。

单精度浮点数的正则表达式的具体例子如图3-6所示。单精度浮点数中,尾数部分是23位,但由于第1位的1被省略了,所以实际上可以表示24位的数值。双精度浮点数的表示方法也是如此,只是位数不同而已。

正则表达式和EXCESS系统
图3-6 单精度浮点数尾数部分的正则表达式

接下来,让我们一起来看一下指数部分中使用的EXCESS系统,使用这种方法主要是为了表示负数时不使用符号位。在某些情况下,在指数部分,需要通过“负〇〇次幂”的形式来表示负数。EXCESS系统表现是指,通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示。也就是说,当指数部分是8位单精度浮点数时,最大值11111111=255的1/2,即01111111=127(小数部分舍弃)表示的是0,指数部分是11位双精度浮点数时,11111111111=2047的1/2,即01111111111=1023(小数部分舍弃)表示的是0。

EXCESS系统可能不太好理解,下面举例来说明。假设有这样一个游戏,用1~13(A~K)的扑克牌来表示负数。这时,我们可以把中间的7这张牌当成0。如果扑克牌7是0,10就表示+3,3就表示-4。事实上,这个规则说的就是EXCESS系统。

作为单精度浮点数的示例,表3-2中列出了指数部分的实际值和用EXCESS系统表现后的值。例如,指数部分为二进制数11111111(十进制数255),那么在EXCESS系统中则表示为128次幂。这是因为255- 127=128。因此,8位的情况下,表示的范围就是-127次幂~128次幂。

表3-2 单精度浮点数指数部分的EXCESS系统表现
正则表达式和EXCESS系统

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!