帮大家整理一下小数在数电中的表示方法以及各种转换:
以下内容来自百度知道网友:
二进制转十进制,十进制转二进制的算法 十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写 就是结果 例如302 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 余0 9/2 = 4 余1 4/2 = 2 余0 2/2 = 1 余0 故二进制为100101110 二进制转十进制 从最后一位开始算,依次列为第0、1、2...位 第n位的数(0或1)乘以2的n次方 得到的结果相加就是答案 例如:01101011.转十进制: 第0位:1乘2的0次方=1 1乘2的1次方=2 0乘2的2次方=0 1乘2的3次方=8 0乘2的4次方=0 1乘2的5次方=32 1乘2的6次方=64 0乘2的7次方=0 然后:1+2+0 +8+0+32+64+0=107. 二进制01101011=十进制107. 一、二进制数转换成十进制数 由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 二、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 2.十进制小数转换为二进制小数 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 回答者:HackerKinsn - 试用期 一级 2-24 13:31 1.二进制与十进制的转换 (1)二进制转十进制 方法:"按权展开求和" 例: (1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 =(8+0+2+1+0+0.25)10 =(11.25)10 (2)十进制转二进制 · 十进制整数转二进制数:"除以2取余,逆序输出" 例: (89)10=(1011001)2 2 89 2 44 …… 1 2 22 …… 0 2 11 …… 0 2 5 …… 1 2 2 …… 1 2 1 …… 0 0 …… 1 · 十进制小数转二进制数:"乘以2取整,顺序输出" 例: (0.625)10= (0.101)2 0.625 X 2 1.25 X 2 0.5 X 2 1.0 2.八进制与二进制的转换 例:将八进制的37.416转换成二进制数: 37 . 4 1 6 011 111 .100 001 110 即:(37.416)8 =(11111.10000111)2 例:将二进制的10110.0011 转换成八进制: 0 1 0 1 1 0 . 0 0 1 1 0 0 2 6 . 1 4 即:(10110.011)2 =(26.14)8 3.十六进制与二进制的转换 例:将十六进制数5DF.9 转换成二进制: 5 D F . 9 0101 1101 1111.1001 即:(5DF.9)16 =(10111011111.1001)2 例:将二进制数1100001.111 转换成十六进制: 0110 0001 . 1110 6 1 . E 即:(1100001.111)2 =(61.E)16
定点小数的编码方法
用定点小数的常用编码方法有三种,即原码表示法、补码表示法和反码表示法。
(1) 原码表示法,是用机器数的最高一位代表符号,以下各位给出数值绝对值的表示方法。其定义为:
[X]原= (2.9)
例如, X=+0.1011, [X]原=01011
X=-0.1011, [X]原=11011
按定义,当X=-0.1011时,[X]原= 1-X= 1.0000-(-0.1011) =11011。这里的X为数的实际值,即相应机器数的真值,[X]原为原码表示的机器数。
原码的性质:
① 在原码表示中,机器数的最高位是符号位,0代表正号,1代表负号,以下各位是数的绝对值,即[X]原 = 符号位 + |X|。
② 在原码表示中,零有两种表示形式,即
[+0.0]原=00000, [-0.0]原=10000
设X、Y的真值分别为X=+0.0000,Y=-0.0000。则按原码定义[X]原=00000, [Y]原= 1-Y = 1+0.0000 = 10000,因此零有原码两种表示形式。
③ 原码表示方法的优点,是在数的真值和它的原码表示之间的对应关系简单,相互转换容易,用原码实现乘除运算的规则简单。缺点是用原码实现加减运算很不方便。要比较参与加减运算两个数的符号,要比较两个数的绝对值的大小,还要确定运算结果的正确的符号等,因此在计算机中经常用后面介绍的补码实现加减运算。
(2) 补码表示法,是用机器数的最高一位代表符号,以下各位给出数值按2取模结果的表示方法,其定义为
[X]补= (2.10)
例如:
X=+0.1011, [X]补=01011
X=-0.1011, [X]补=10101
按补码的定义,当X=-0.1011时,[X]补 = 2+X =10.0000+(-0.1011) = 10101。
补码的性质:
① 在补码表示中,机器数的最高一位是符号位,0代表正号,1代表负号。机器数和它的真值的关系,是 [X]补 = 2*符号位 + X。
② 在补码表示中,0有唯一的编码,即 [+0.0]补 = [-0.0]补 = 00000
假定X = +0.0000, Y = -0.0000,依据补码定义, 则有
[X]补 = X = 00000, [Y]补= 2+Y = 10.0000+0.0000 = 10.0000 = 00000
此处最后一步实现按2取模,处在小数点左侧第二位上的1去掉了。
③ 补码表示的两个数在进行加法运算时,可以把符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,运算后的结果按2取模后,得到的新结果就是本次加法运算的结果,即机器数的符号位与数值位都是正确的补码表示,即:
[X+Y]补 = [X]补 + [Y]补 MOD 2 (2.11)
这一结论极为重要。
例如, X =+0.1010, Y = -0.0101,则:
[X]补= 01010, [Y]补= 11011,求得:
[X]补 + [Y]补 = 01010+11011 = 100101 ,按2取模后,符号位前边一位上的1去掉,则最后结果为00101,其真值为 +0.0101。符号位与数值位均正确。
又如,X1=X2=-0.1000,则[X1]补=[X2]补 =11000 那么[X+X]补=11000+11000=110000,按2取模后得10000,它的真值为-1。由此看出,用补码表示定点小数时,它能表示-1的值。
④ [X]补与其真值的关系。假定[X]补= X0X1X2…Xn,则有[X]补= 2X0+X,此关系对X为正、为零和为负都是正确的。X为正时,X0应为0,[X]补= 2*0 + X = X,X为负时,X0应为1,[X]补 = 2*1+X = 2 + X ,均与补码的定义吻合。由此又可以得到从[X]补求X的关系,即由机器数求其代表的真值的关系如下:
X = [X]补 - 2X0
= X0X1X2…Xn - 2X0
= -X0 + 0.X1X2…Xn (2.12)
当X为正数时,X0=0 真值 X = [X]补 ;
当X为负数时,X0=1 真值 X = -1 + 0.X1X2…Xn = -(1-0.X1X2…Xn)。
对补码的数值部分求补,并加上符号即得真值。
例如[X补=10110,则X的真值 = -(1-0.0110) = -0.1010。当已知补码而需求此数的真值时可采用此法,此公式在推导补码乘法的运算算法中很有用。
⑤ 补码的算术移位
将[X] 补的符号位与数值位一起右移一次并保持原符号位的值不变,可实现除法功能(除以2),即[X/2]补= X0X0X1X2…Xn-1Xn。今考虑X为正、负数两种情况。
设: X= 0.0110, [X]补=00110,右移一位得00011,是X除以2的补码结果。
设: X=-0.0110,[X]补=11010,计算 [X/2]补=11101,再按④求真值得X/2=-0.0011,说明得到的确实是X除以2的结果。
为了得到一个数的补码表示,当然可以通过补码的定义求得,但更简便的办法是:
当X≥0时,[X]补的符号位取0,数值位取X的各数值位上的值,此时有[X] 补=[X] 原。
当X<0时,[X]补的符号位取1,将X的各数值位取反(0变1,1变0)再在最低位加1,以得到 [X]补的各数值位上的值。
从[X]原求 [X] 补时,对正数或零,有[X] 补=[X]原,对负数,是符号位不变,各数值位变反后再在最低位执行加1操作。同理,由[X]补求 [X]原时,对负数仍是符号位不变,各数值位变反后再在最低位执行加1操作。
在说明补码的性质(3)时,特别强调两个数的补码相加,仅在其运算结果不超出机器能表示的数值范围时,运算结果才是正确的,否则得到的结果不正确。如[X]补+[Y]补=01001+01010=10011。两个大于0.5的正数相加,结果的符号位变成负号,数值部分也是错误的。这是因此参加运算的两个数的和大于1,超出了机器所能表示的范围,产生了所谓的 "溢出"。对负数也会产生溢出,如[X]补+[Y]补=10101+10100=01001,两个负数相加,结果的符号位却变成正号,说明结果是错误的。
为了方便判别结果是否溢出,某些机器采用变形补码,又称模4补码表示方法,其定义为:
[X]补= (2.13)
也就是常说的双符号位的补码表示。例如:
X=+0.1011, [X]补=001011
X=-0.1011, [X]补=110101
按模4补码定义,当X=-0.1011时,[X]补= 4+X = 100.0000+(-0.1011) = 110101。从上式的结果可以看出,模4补码的表示就是在模2补码表示的符号位之前再增加与原符号同值的另一个符号位。
模4补码的性质:
① 模4补码的两个符号位相同,00表示正号,11表示负号,其数值位与其模2补码相同。当符号位为01或10时,表示数值溢出。01表示两个正数相加之和≥1的情况,通称数值 "上溢";为10时,表示两个负数相加,而其和小于-1的情况,通称数值 "下溢"。前面的1个符号位是正确的符号位。
② 在模4补码表示中,零有唯一的编码,即 [+0.0]补 = [-0.0]补= 000000。模4补码能表示-1,即为110000,与模2补码的情况非常类似。
模4补码具有模2补码的全部优点,而且更容易检查加减运算中的溢出情况。有必要指出,存储每个模4的补码数时,只要存一个符号位,因为任何一个正确的数值,其模4补码的两个符号位总是相同的。只在把两个模4补码的数送往算术与逻辑运算部件完成加减计算时,才把每个数的符号位的值同时送到算术与逻辑运算部件的两位符号位,即只在算术与逻辑运算部件中采用双符号位。
3) 反码表示法,是用机器数的最高一位代表符号,数值位是对负数值各位取反的表示方法,其定义为
[X]反 = (2.14)
例如, X=+0.1011, [X]反 =01011
X=-0.1011, [X]反 =10100
正数的反码与其原码、补码相同。
反码的性质:
① 在反码表示中,机器数最高位为符号位,0代表正号,1代表负号,负数的机器数和它的真值之间的关系为:
[X]反 = ((2-2-n)+X) MOD(2-2-n)
用反码进行两数相加时,若最高位有进位,还必须把该进位值加到结果的最低位,才能得到真正的结果,这一操作通称 "循环进位"。
X= +0.1011, Y=-0.0100,有[X]反 =01011, [Y]反 =11011,
[X+Y]反 = [X]反 + [Y]反 = 01011 + 11011 = 100110,最高位有进位,要加到结果的最低位,得 00110 + 00001 = 00111,即 +0.0111。
又如, X= +0.1011, Y= +0.0100,[X+Y]反 = [X]反 + [Y]反 = 01011+00100=01111,最高位无进位值,得到的已是最终结果。
② 在反码表示中,零有两个编码,即
[+0.0]反 = 00000 , [-0.0]反 = 11111
有人也称反码为1的补码(One's Complement),它的实际模为2-2-n。这里的-n为最低位的位序号。
用反码实现算术运算不方便,0值又有两个编码,用得不很普遍。
以下内容来自百度知道:
小数怎么以二进制表示?
可以这样:首先将一个小数如:235.725的小数部分取出,即:0.725,将其乘以进制数二进制就乘以2后得到1。45,取其整数部分1为二进制小数的第一项(十分位),在将小数部分0。45乘2得0。9,取其整数部分为二进制小数的第二位(百分位)0,在将其小数部分0。9乘2,得1。8,取其整数部分为二进制小数的第三位(千分位)1,取其小数部分0。8再乘2……以此类推,直到值为0或形成循环小数则停止。
以下内容来自互动百科:
浮点尾数 - 实数运算
实数运算
从浮点数据的存储说明浮点运算为满足一定计算机精度的近似运算,所有存在一定的误差。
定点格式:即约定机器中所有数据的小数点位置是固定不变的。
浮点表示法:把数的范围和精度分别表示的方法,相当于数的小数点的位置随比例因子的不同而在一定范围内可以自由浮动。
阶码:浮点数编码中,表示小数点的位置的代码。
冯诺依曼舍入法:浮点数据的一种舍入方法,在截去多余位时,将剩下数据的最低位置1。
尾数:浮点数据编码中,表示数据有效值的代码。
基数:浮点数据编码中,对阶码所代表的指数值的数据,在计算机中是一个常数,不用代码表示。
定点数是小数点固定的数。在计算机中没有专门表示小数点的位,小数点的位置是约定默认的。一般固定在机器数的最低位之后,或是固定在符号位之后。前者称为定点纯整数,后者称为定点纯小数。
例题:用8位原码表示定点纯小数(-0.6875)10
(-0.6875)10=(-0.1011)2
定点纯小数表示为
定点数表示法简单直观,但是数值表示的范围太小,运算时容易产生溢出。
浮点数是小数点的位置可以变动的数。为增大数值表示范围,防止溢出,采用浮点数表示法。浮点表示法类似于十进制中的科学计数法。
在计算机中通常把浮点数分成阶码和尾数两部分来表示,其中阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。为保证不损失有效数字,对尾数进行规格化处理,也就是平时所说的科学记数法,即保证尾数的最高位为1,实际数值通过阶码进行调整。
一般浮点数在机器中的格式为:
浮点数是表示小数的一种方法。所谓浮点就是小数点的位置不固定,与此相反有定点数,即小数点的位置固定。整数可以看做是一种特殊的定点数,即小数点在末尾。8086/8088中没有浮点数处理指令,不过从486起,CPU内置了浮点数处理器,可以执行浮点运算。一般的浮点数有点象科学计数法,包括符号位、指数部分和尾数部分。
浮点运算指令
用于对浮点数进行运算。浮点运算要大大复杂于整数运算,所以CPU中一般还会有专门负责浮点运算的浮点运算单元。现在的浮点指令中一般还加入了向量指令,用于直接对矩阵进行运算,对于现在的多媒体和3D处理很有用。
文章评论(0条评论)
登录后参与讨论