数字逻辑设计小班讨论第一次讨论报告

上传人:飞*** 文档编号:47867717 上传时间:2018-07-05 格式:PDF 页数:16 大小:365.90KB
返回 下载 相关 举报
数字逻辑设计小班讨论第一次讨论报告_第1页
第1页 / 共16页
数字逻辑设计小班讨论第一次讨论报告_第2页
第2页 / 共16页
数字逻辑设计小班讨论第一次讨论报告_第3页
第3页 / 共16页
数字逻辑设计小班讨论第一次讨论报告_第4页
第4页 / 共16页
数字逻辑设计小班讨论第一次讨论报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《数字逻辑设计小班讨论第一次讨论报告》由会员分享,可在线阅读,更多相关《数字逻辑设计小班讨论第一次讨论报告(16页珍藏版)》请在金锄头文库上搜索。

1、数字逻辑设计及应用第 1 次讨论课报告讨论组( 2 班 314)选课号姓名指导教师学号2015 年 10 月 8 日1.查阅资料(书籍,网络) ,说明计算机中整数(char)和小数( float)的表示方法。使用 C语言编程调试测试分析有符号字节型整数(char)和浮点数 (float)表示方法 (可选) 。目的:通过二进制编码的学习, 同学们有了理论的认识。 本题目将通过实际验证, 掌握真实情 况下计算机系统的数的表示。要完成本题目,学生需要查找资料,如能通过C语言编程验证,查看内存中数的实际存储内容, 将增强对计算机系统和数制的理解,并在以后的开发工作中打下基础。 分工:1.1计算机中的整

2、数( char)的表示为整数在计算机内表示:符号位在最高为,用0表示正数, 1 表示负数。其他位为数值。(1) 、数值部分用二进制数的绝对值表示-这种就是原码表示法。(2) 、 正数的反骂与原码相同,负数的反码是保持符号位为1, 然后把对应的正数按位取反。比较少用譬如一个数字是29 -011101 -29 就是 100010。这个用于计算很麻烦,所以很少用(3) 、补码。正数的补码和原码相同,负数的补码将原码除符号位外按位取反加1 得到的譬如 +57 = 00111001, -57 = 11000111.这个逻辑简单,可以简化运算,一般都采用补码来表示正数的。1.2计算机中的小数( float

3、)的表示通常有两种方法:一种是规定小数点位置固定不变,称为定点数 。另一种是小数点的位置不固定,可以浮动,称为浮点数 。在计算机中, 通常是用定点数来表示整数和纯小数,分别称为定点整数和定点小数。对于既有整数部分、又有小数部分的数,一般用浮点数表示。1.2.1详细介绍:(1) 、定点整数 ,在定点数中, 当小数点的位置固定在数值位最低位的右边时,就表示一个整数。 请注意: 小数点并不单独占1 个二进制位, 而是默认在最低位的右边。定点整数又分为有符号数和无符号数两类。(2) 、定点小数 ,当小数点的位置固定在符号位与最高数值位之间时,就表示一个纯小数。因为定点数所能表示数的范围较小,常常不能满

4、足实际问题的需要,所以要采用能表示数的范围更大的浮点数。(3) 、浮点数 ,在浮点数表示法中,小数点的位置是可以浮动的。在大多数计算机中,都把尾数s 定为二进制纯小数,把阶码 p 定为二进制定点整数。尾数 S的二进制位数决定了所表示数的精度;阶码p 的二进制位决定了所能表示的数的范围。为了使所表示的浮点数既精度高、又范围大,就必须合理规定浮点数的存储格式。1.2.2举例12.341010 = 1101+ 2100+ 310-1+ 410-2= 12(34100) 在比如二进制:101.112 = 122 + 021 + 120 + 12-1 + 12-2 = 4 + 0 + 1 + 12+ 1

5、4= 5(34)。在 IEEE 标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号,指数和尾数。这样,通过尾数和可以调节的指数(所以称为“浮点 “)就可以表达给定的数值了。具体的格式:符号位阶码尾数长度float 182332double 1115264浮点数在 32 位机子上有两种精度,float 占 32 位, double 占 64 位。我们应该不要特殊看到浮点数的内存存储形式,他跟整数没有什么区别,只是在这 4 字节或者8 字节里有3个区域, 整数有符号只有符号位及后面的数值,之所以最高位表示

6、有符号数的符号位。原因之一在于0x7fffffff 位最大整数,为整个32 位所能表示的最大无符号整数0xffffffff 的一半减一,也就是:比如1 字节:无符号是:0xff,有符号正数为:(0, 127 ,负数为 -128, 0) 。在 8位有符号时,肯定内存值大于等于: 0x80 。二进制就是1000 0000 ,比他大,只会在低7 位上变化,最高位已经是1 了,变了就变小了。所以这里也是一个比较巧用的地方,一举两得。那么, 32 位浮点数的换算:1. 从浮点数到16 进制数float var = 5.2f; 就这个浮点数,我们一步一步将它转换为16 进制数。首先,整数部分5,4 位二进

7、制表示为:0101 。其次,小数部分0.2,我们应该学了小数转换为二进制的计算方法,那么就是依次乘以2,取整数部分作为二进制数,取小数部分继续乘以2,一直算到小数结果为0 为止。那么对 0.2 进行计算:0.22 = 0.42 = 0.82 = 1.6(0.6)2 = 1.2(0.2)2 = 0.42 = 0.82 = 1.6(0.6)2 = 1.2 . . 0 0 1 1 0 0 11 . . 因此,这里把0.2 的二进制就计算出来了,结果就为:0.00110011. . 这里的省略号是没有办法计算完。二进制序列无限循环,没有到达结果为0 的那一天。那么此时我们该怎么办?这里就得取到一定的二

8、进制位数后停止计算,然后舍入。 我们知道,float 是 32 位,后面尾数的长度只能最大23 位。因此,计算结束的时候,整数部分加上小数部分的二进制一共 23 位二进制。因此5.2 的二进制表示就为:101.00110011001100110011 一共 23 位。此时,使用科学计数法表示,结果为:1.01001100110011001100111022由于我们规定,使用二进制科学计数法后,小数点左边必须为1(肯定为1 嘛,为 0 的话那不就是0.xxxx*sxxx 了,这样没有什么意义),这里不能为0 是有一个很大的好处的,为什么?因为规定为1,这样这个1 就不用存储了,我们在从16 进制

9、数换算到浮点数的时候加上这个1 就是了, 因为我们知道这里应该有个1,省略到这个1 的目的是为了后面的小数部分能够多表示一位,精度就更高一些了哟。那么省略到小数点前面的1 后的结果为:.010011001100110011001101022这里后面蓝色的0 就是补上的,这里不是随便补的一个0,而是 0.2 的二进制在这一位上本来就应该为0,如果该为1,我们就得补上一个1.是不是这样多了一位后,实际上我们用 23 位表示了24 位的数据量。有一个位是隐藏了,固定为1 的。我们不必记录它。但是, 在对阶或向右规格化时,尾数要向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定的误差,因此要进

10、行舍入处理。常用的舍入方法有两种:一种是“0 舍 1入”法,即如果右移时被丢掉数位的最高位为0 则舍去,为1 则将尾数的末位加“1”,另一种是“恒置1”,即只要数位被移掉,就在尾数的末位恒置“1”。举个例子:123.456 的二进制表示:123.456 的二进制到23 位时: 111 1011.0111 0100 1011 1100 01. 后面还有依次为01. 等低位,由于最高位的1 会被隐藏,向后扩展一位如果不做舍入操作则结果为:1.11 1011 0111 0100 1011 1100 01026但是经过舍入操作后,由于被舍掉的位的最高位是1,或者“恒置1”法,最后面的0都应该是1。因此

11、最终就应该是:1.11 1011 0111 0100 1011 1100 11026在这里需要说明,不管是恒置1,还是 0 舍 1 入法,其根本都是为了减小误差。尾数在这里就计算好了,他就是01001100110011001100110 。再来看阶数,这里我们知道是22次方,那么指数就是2。同样 IEEE 标准又规定了,因为中间的阶码在 float 中是占 8 位,而这个阶码又是有符号的(意思就是说,可以有2-2次方的形式)。float 类型的 偏置量 Bias = 2k-1 -1 = 28-1 -1 = 127,但还要补上刚才因为左移作为小数部分的 2 位(也就是科学技术法的指数),因此偏置

12、量为 127 + 2=129 ,就是 IEEE 浮点数表示标准:V = (-1)s M 2E E = e - Bias 中的 e ,此前计算 Bias=127 ,刚好验证了 E = 129 - 127 = 2 。这里的阶码就是12910 ,二进制就是:1000 00012 。因此,拼接起来后:1000 0001 01001100110011001100110 | 8 位 | | - 23位 - | 一共就是 31 位了,这里还差一位,那就是符号位,我们定义的是5.2,正数。因此这里最高位是0,1 表示负数。而后结果就是:0 1000 0001 01001100110011001100110 1

13、 位 | 8 位 | | - 23位 - | 到这里,我们内存里面的十六进制数产生了,分开来看:0 100 0000 1 010 0110 0110 0110 0110 0110 4 0 A 6 6 6 6 6 因此,我们看到的就是0x40A66666, 此就是 5.2 最终的整数形式。2.从十六进制数到浮点数我们还是可以用上面5.2 的例子, 再将 0x40A66666换算回去, 用同样一个例子,结果更直观,逆运算更好理解。那我们就开始吧。首先,要还原回去,必须将这个16 进制用我们的计算器换算成二进制: 0 100 0000 1 010 0110 0110 0110 0110 011 0

14、首先确定符号,这里是0,因此是正数。其次换成 10 进制就是: 12910 知道这里需要129 - 127 = 2得到指数,得到了指数,我们便知道我们小数点是向哪个方向移动了好多位。脑子里已经有了一个科学计数法的锥形。再次把那的23 位提取出来,这里不把它换成10 进制,因为我们指数是表示的二进制上移动了多少位,底数是2,而不是 10。这里因为之前我们都知道有个固定的1 给省略了, 因此这里要给加上去。加上去之后:1 010 0110 0110 0110 0110 011 0 这里是 24 位,我们先不管,小数点添进去:1 . 010 0110 0110 0110 0110 011 0 *10

15、22 然后将科学计数法变换成普通的二进制小数:1 01 . 0 0110 0110 0110 0110 011 0 就可以把整数部分换成十进制了:1 01 . 0 0110 0110 0110 0110 011 0 3. xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 我们知道了,整数部分是5,后面的小数部分再进行逆运算:这里我们就应该想想小数到二进制数是乘法,这里逆运算就应该除以2,因此就可以表示为:0 . 0 0110 0110 0110 0110 011 0 0 + 02-1 + 02-2 + 12-3 + 12-4 + 02-5 + 02-6 + 12-7+ . . + 02-21这样一个式子,我们算出结果来,放在浮点数里:5.1999998 。因此我们可以看到精度已经有损失了。float var = 0.5, 算 16 进制数。首先, 0.5 整数部分为0,这里就不处理了。其次, 0.5 小数部分,二进制表示为:0.1 这里是 0.1 ,将尾数补满23 位则是:0.10 0000 0000 0000 0000 0002 由于小数点左边是0,因此需要向右移动一位,因此:1.0 0000 0000 0000 0000 000022-1这里 1 又被省略掉,所以23 位全部变成了0 ,因此:.00 0000 0000 0000 0000 0000

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号