首页 > 编程知识 正文

二进制定点数和浮点数,定点与浮点表示

时间:2023-05-04 06:44:15 阅读:26685 作者:2571

中机数的类型:固定点数(整数)和浮点数)本文内容参考自ckdkfd老师的 《深入理解计算机网络》 一书中国水利水电出版社

一、计算机共有两种机数类型的:机数是计算机中参与运算的有符号二进制数。 其实,它和我们平时使用的十进制数一样,有整数和小数,但关键是,二进制数和我们平时写十进制小数一样,有了“.”,二进制数就会被内存中的字长限制住,小数的小数点“.” 这也有接下来要重点介绍的“定点数”和“浮点数”的区别。

引用自-CKDKFD老师《深入理解计算机网络》的书

首先,请想想为什么带上“.”会导致二进制文件受限于内存中的字长限制,无法灵活地表示浮点数(小数)。

解释:是个老话。 为什么这么说,是因为机器只能识别0、1这两种表示。 那么,如果想在机器中显示“.”,可以用0,也可以用1,比如用:

是十进制的3.1。 假设这个'.'用0表示。 3.1转换为二进制数时为011 0 00011。 这里有两个非常巨大的洞。 首先,011 0 00011也以十进制195的二进制表示,因此计算机无法确定是195还是3.1。 其次,即使可以用0表示'.',01015,所以不能用0表示小数点,用1表示怎么样? 使用1也不行,这和用0表示缺点一样。

那么,能规定字长的第几个表示小数点吗? 是的。 例如,假设字符长度为64位的内存的第32位是小数点,则会失去灵活性。 因为,既然将第32位定为小数点,它就保持固定,所以第1位一定是符号位。 因此,表示整数部分的位数只剩下第2位到第31位,表示小数部分的位数只剩下第33位到第64位(因为位数已经决定,所以可以用该固定长度表现的数值范围受到很大限制。 根据以上分析,二进制数不能像十进制数那样用“.”直观地表示浮点数,那么如何表示浮点数比较合适呢? 文章“浮点数”追溯到的机翼的详细说明。

整数型机器的数量经常被表示。 但是,只有在最高位增加了一个符号位,小数点始终位于最右边,可以完全忽略。 和我们写十进制整数时一样,小数的话,小数点不能不考虑。 如上所述,在计算机上,“.”不能像我们平时写十进制那样处理好。 因为为了保持灵活性,不能将一位固定在计算机内存中进行表示。”

为了使计算机自动识别机器数量的小数点位置,并正确识别对应的机器数量的大小,根据机器数量中小数点的位置是否固定,将所有机器数量分为两种:固定点数和浮点数。 (所谓浮点数,实际上是对象性的,但小数点数在不同的浮点数之间总是“浮动”,并不是固定的。

引用自-CKDKFD老师《深入理解计算机网络》的书

1,http://www.Sina.com /

定点数又细分为两类:定点整数,定点小数3360,定点整数

定点整数是小数点固定在有效数值部分的最下位后的定点数,是纯整数。 例如,如果某个定点整数是n位二进制,其最高位为符号,因此可表示的数值范围为:-(2n-1-1 )=X=2n-1-1。 例如,8比特的定点整数除了最高有效比特表示已编码比特之外还可具体用于表示数字的剩馀7比特,因此最大值为0 11111111 (即,127 )和27-1,其中所能表示的最小值为111111 、定点小数

小数是小数点位置固定在符号位后,到有效数的最高位为止的固定点数,是纯小数。 当某小数点小数为n位,其最高位为相同符号位时,可表现的数值范围为:-(1-2-(n-1 )=x=1-2- ) (n-1 ) )。 举例来说,根据用于表示真值(除了已编码比特之外)的8比特定点小数的总和7比特,所述可表达的最大值为0.1111111,即0.50.250.1250.0625.03125.015625.0078125=这种方式不能用机器的数量表示0.9921876。 因为每个步骤的叠加都是以1/2n-1实现的)。 等于1-2-7,可表达的最小值为1.1111111,即-0.9921875,等于-(1-2-7)。 经验之谈

n位连续为1的正二进制整数的值为2n-1。 (n-1是因为最高位是符号位。

一个n比特连续为1的负二进制整数的值是-2n-1。 (n-1是因为最高位比特是符号比特) ) ) )。

一个n位连续为1的整数二进制小数的值是1-2-n,不需要把每个位转换成10进制进行加法运算,直接1-2-n就可以了。 同样,一个n位连续为1的负二进制小数的值是-(1-2-n )。

2,http://www.Sina.com /

如上所述,计算机中的二进制数的意思是,如果要表示的话,有整数和小数的常量点(这里常量点是指将一位固定在内存中,使之表示“.”)不方便写十进制的小数)。 实际的解决方法还是需要用0和1来表达,但需要改变表达方法。 坦率地说

一些,我们实际使用的表示即有整数又有小数的二进制表示法不包括".",计算机可以通过实际的表示确定小数点的具体位置,其实就是"浮点数法"–这种表示法很灵活,可以表示任何小数,同时也充分利用的计算机的字长,表示的范围也比定点法扩大好多倍,实际应用起来没有一点问题。
这里通过实际的举例来说明"浮点",比如12.23中".“是在第3位,1.223中”.“是在第2位,1099.25中”.“是在第5位,看上去,不同的数中这个”.“是不是位置不同,浮来浮去的?所以我们很形象地把实际中用来表示即有整数部分又有小数部分的定点数的表示法称为"浮点”。于是乎,即有整数部分又有小数部分的数直接就称为"浮点数"了。
那么,计算机中是如何灵活地来表示一个浮点数的呢?
我们知道,在十进制数中,比如123.45用科学计数法可以表达为1.2345 * 22,其中1,2345为尾数,10为进制基数,2为指数,尾数和指数均为十进制表示,如果是负数,在前面加一个"-“就行。
如果需要将以上内容整理成一个通式表达的话,尾数用M表示,指数用E表示,那么十进制数N的表达通式是:
N = M * 10E;
按照以上的思路可以得出二进制的表达通式为:
N = M * 2E(只需要换进制基数就行,将10换成2)。
但是二进制的表达通式中,尾数M必须是二进制原码格式,指数E也必须是二进制原码格式,E在十进制中称"指数”,但是在二进制通式中称为"阶码"(IEEE 754中是用移码表示)。
最后一点需要强调的是,浮点数在计算机存储器中存储的格式可以是原码格式,也可以是补码格式,但通常都是补码格式,因为补码格式方便正负数的运算。
我们再来仔细观察一下这个表达通式:
:N = M * 2E
之前直接在存储器中像存储十进制小数一样存储二进制浮点数的方式已经被证明不灵活以及非常受限。那么还有什么办法?
通过再次对以上通式的观察,我们可以发现,一个浮点数只要知道了它的符号位,指数和尾数,就可以根据以上的通式反推出它的实际值,所以最终的解决办法就是在存储器中分别存数浮点数的符号位,指数位和尾数位,不同的标准对符号位,指数位和尾数为规定的存储位数不同,我们来讨论IEEE 754标准。
通过表格图示符号位(S),指数(E),尾数(M)的存储顺序: 符号位 S指数位 E尾数位 M 指数位E的形式实际上就是一个定点整数(纯整数),可以通过它推算出浮点数的小数点位置,所以它也间接决定了浮点数的表示范围,M的形式实际上就是一个定点小数(纯小数),它表示了浮点数的有效值,决定了浮点数的精度(精度说白了就是小数点保留几位)。指数E为正时,表示转换后尾数部分的小数点比原数的小数点位置左移了E位(用十进制举例,更直观,比如123.4变成1.234 * 102,那么1.234的小数点相比123.4左移了2位,二进制也是一个意思,只是进制基数为2),指数E为负时,表示转换后尾数部分的小数点与原数的小数点位置右移了E位。
如一个浮点数为-0.10101 * 211,则它在16位字长的存储器(假设规定E用4位表示,M用11位表示,S符号位占1位)中的存储格式如下表格: 符号位 S指数位 E尾数位 M1001110101000000 通过以上的分析,我们发现了,实际上所有的浮点数都可以通过移动小数点来变成一个纯小数和一个指数的乘积,同时,为了规范起见,规定机器数的浮点数表达形式中尾数的最高有效位(即小数点右边第一位)不能为0,必须为1,也就是说,不要出现0.00101001 * 2101101这种情况!
把所有不满足小数点右边第一位必须为1的浮点数变成满足要求格式的过程称为浮点数的规格化处理(实际上就是通过小数点的以为和修改指数来实现)。
在IEEE 754标准中,把浮点数分成了单精度和双精度两种,同时规定了单精度浮点数长度为32位(4字节),双精度浮点数为64位(8字节)。
IEEE 754标准中,E和M都是用补码表示,而不是原码,因为补码方便计算。
这里又有一个问题需要说明,我们都知道,指数E是可以为负的,这样可能导致一个浮点数中出现两个符号位(浮点数自身和浮点数指数的),这样的结果会导致在比较两个浮点数大小时比较麻烦,那么这种问题如何解决呢?
实际中的解决办法是,可以在指数的基础上加上一个固定的正数(这个正数是无符号的正数,就是说,它所有的二进制位都是它的真值,它没有符号位!),保证指数一定是正的(加的这个正数是固定的)!这种操作在IEEE 754中称为偏移,得到的结果称为"移码"。所以,用移码表示能确保指数部分均为无符号的正数,正数的原码和补码完全一致,不用转换。
下表提供单精度浮点数和双精度浮点数各部分在存储器中的结构 浮点数类型符号所在位(S)指数所在位(E)尾数所在位(M)偏移值(固定的正数)单精度浮点数31(1)30-23(8)22-0(23)127(对应二进制位:01111111)双精度浮点数63(1)62-52(11)51-0(52)1023(对应二进制位:0111111111) 以上表中的指数E是以"移码"格式表示的,所以IEEE 754 中用于浮点数中小数点位置的移码 = 原指数 + 偏移值。如果用e来表示原来的指数,则有如下关系式:
e = E + 偏移值
总结:在计算浮点数时可以用以下公式统一表示:X = S(1.M) * 2E-偏移值,其中X为浮点数原码,S为符号位,M为尾数,E为移码表示,"E-偏移值"就等于原指数。
PS:可能有的人会异或,为什么是1.M。因为这是格式化,所有的浮点数都可以通过移动指数来格式化,比如二进制的0.1 = 1.0 * 2-1,0.00101 = 1.01 * 2-3。统一了格式便于理解和计算!
在此,再次感谢ckdkfd老师的《深入理解计算机网络》一书对本文的启发!

PS:时间有限,有关计算机基础的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。