CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

机器计算的面值与真值

已有 4817 次阅读 2010-4-6 11:20 |个人分类:教学点滴|系统分类:科研笔记| 补码, 限位数, 算术运算

                                                                      ——回答某些网友的疑问
 
                                                                     姜咏江
 
在计算机设计当中必须解决好机器表数的“面值”与所表示的“真值”之间的关系。任何计算机的位长都是有限的,用元器件表达的数码序列不包括小数点,也不包括正负号。许多书中提到的“最高位是正负号”是一种错误的理解,虽然在二进制中我们可以在补码制的规定之下,用数的最高位是1来判断这个数是一个负数,但这纯属“巧合”。
 
位数确定的数称为限位数。限位数的数量一定。例如,4位十进制数只有10000个,8位二进制数只有256个。限位数用数码写出来就是一个无符号的整数,并且无效的0不能不写。限位数不直接表达出来的无符号整数,就叫限位数的面值。限位数按着无符号整数进行算术运算,就称为面值运算。
 
例如,4532+7123 结果是1655,这是由于最高位进位不能用4位十进制表示“丢失”的缘故造成的。
 
正是由于限位数面值运算会丢失进位,会使我们熟悉的一般整数计算结果可能不对,故而运算之间不能用“=”连接,而采用变动意思的“<=>”连接。于是上例可以如下来写:
 
4532+7123 <=> 1655
 
常规意义下,这种面值运算没有多大用处,但在限位数中引入真值的概念,就可以用限位数面值的加法运算,完成我们的全部算术运算。
 
下面我们举例来说明如何规定限位数的真值,及如何用面值加法替代加减法。
 
例如,4位十进制数两数面值和为10000的数是一一对应的,其中一个叫另一个的补码。由于-1至-4999与1至4999也是一一对应的,9999至5001也与1至4999是一一对应的,故就可用限位数9999至5001表示-1至-4999。这样的规定使负数能用较小那部分正数的补码表示,从而取消了“符号”。限位数表示的平常十进制数称为限位数的真值。由于5000的补码是自身,为避免二义性,就规定5000的真值是-5000。于是4位限位数可以代表-5000至4999的整数,如果认定小数点的位置,也可以代表相应的小数。
 
现在用真值的表示来理解4532+7123 <=> 1655,那么结果是对的。因为7123>5000,故它真值是-2877,而4532-2877 = 1655这正是面值加法运算的结果。
 
因为“减去一个数,等于加上这个数的相反数”,故带减号的限位数真值可以用其补码表示,所以限位数的减法运算可以用加法替代。例如,
 
1245-7222 = 1245+2778 <=> 4023
 
这是因为7222的真值是-2778,那么1245-(-2778) = 4023,可见用限位数面值加法就可以解决一定范围内的正负数运算问题。
 
二进制的运算器可以用限位数面值运算的方法设计出来,最终得到的真值,需要先判断正负,再经过简单的变化才能够得到。
 
不知能否满足需要。
 
2010-4-6
 


https://blog.sciencenet.cn/blog-340399-309342.html

上一篇:冒牌专家害死人
下一篇:校长就应该是教育家
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-24 00:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部