当前位置: 代码迷 >> C语言 >> 有谁懂得对小数处理请进来
  详细解决方案

有谁懂得对小数处理请进来

热度:373   发布时间:2006-10-12 20:30:32.0
结果怎样
----------------解决方案--------------------------------------------------------
什么结果?
-0。1001110

这是什么东东,8位的二进制小数的小数点前面是符号位,0代表是正,"-" 这个是什么
----------------解决方案--------------------------------------------------------
大吓你不知道题目是什么?求-0.1001110它的补码结果是什么?-是符号呢,现在求补码啊。
----------------解决方案--------------------------------------------------------
难度有个负数+2=补码?,请解释

没错 就这么做
----------------解决方案--------------------------------------------------------
求-0.1001110它的补码结果是什么?10.0000000-0.1001110=01.1111111-0.1001110=1.0110001,这个吗?
----------------解决方案--------------------------------------------------------

是的 对应位相减少就行
因为是负数 得到的符号位为1就对了


----------------解决方案--------------------------------------------------------
以下是引用C语言学习者在2006-10-12 20:47:53的发言:
大吓你不知道题目是什么?求-0.1001110它的补码结果是什么?-是符号呢,现在求补码啊。

真值:-0.1001110
原码:1.1001110 --->取反末尾加1.--->补码
补码:1.0110010

或-0.100111+2=1.0110010
----------------解决方案--------------------------------------------------------

一个数x的补码记作[x]补,设模为M,其补码的定义如下:[x]补=M+x。
假设计算机字长为n+1则
定点整数的补码定义如下:[x]补=x(0<=x<2~n),[x]补=2~(n+1)+x=2~(n+1)-|x|(-2~n<=x<0)
其中M=2~(n+1)。要求一个数的补码首先要给出计算机用多少字长来表示这个数的也就是要给出模,比如说求x=-0.1011,M=2的补码则:[x]补=2+(-0.1011)=1.0101(mod 2)


----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-10-12 23:04:10的发言:

真值:-0.1001110
原码:1.1001110 --->取反末尾加1.--->补码
补码:1.0110010

或-0.100111+2=1.0110010

我想提醒版主-0.100111+2不可以这样写,应该写-0.100111+10,因为是二进制。除非有特定,否则不能这样写。我多谢大家给我资料,这些要慢慢消化。
----------------解决方案--------------------------------------------------------

路过的

关于机器如何表示数,有一套完整的方法。如果脱离机器的实现而谈数如何表示是没有意义的。简单的说,整数与小数的实现是不一样的,不仅表示不一样,而且做操作时用的部件也不一样。不包括负数的整数可以用unsign数的方式实现,包括正数和负数以及0的整数可以用许多方法实现,最常用的是2的补码的形式。所以就有了教材上讲的那套规则。而小数在有浮点处理单元的机器上是按Ieee浮点格式实现,和整数的方法完全不一样。对于没有浮点单元的机器,如MCU,定点DSP可以用定标的方式实现。即你把一组本来用来表示整数的法则映射到小数,机器中二进制的结果就按照你映射的规则来解释。

假设一个3位的机器,实现无符号整数:

000: 0
001: 1
010: 2
011: 3
100: 4
101: 5
110: 6
111: 7

注意到最高位的0和1不具有符号的意义,它最多能表示这个数是大于最大值的一半,还是小于最大值的一半。
(不是所有的机器都实现无符号数,因为有时候不是必须的)

假设一个3位的机器,用二的补码实现无整数:

100:-4
101:-3
110:-2
111:-1
000:0 <------------
001:1
010:2
011:3

注意到:
1)正数与负数的个数不同;
2)把从000到011搬到100前面去,就和无符号数的二进制排列相同了;
3)正数与负数以000为中心线对称,但它们的二进制值正好满足2的补码的关系。
如001取反得110加1得111等。
4)二进制的最高位上的0和1正好和正负号对应,所以有了符号位的意义。
5)采用这种解释(2的补码表示负数)的最大优点是可以用加法表示减法,而节省硬件,如:
2-1=2+(-1)=010+111=(1)001=1,最高位去掉了;
1-2=1+(-2)=001+110=111=-1也同样正确。

把这套数解释为小数,如把最大值解释为-2,则有:

100:-4/2
101:-3/2
110:-2/2
111:-1/2
000:0 <------------
001:1/2
010:2/2
011:3/3



也可以把这套数最大值解释为-1

100:-4/4 = -1
101:-3/4
110:-2/4
111:-1/4
000:0 <------------
001:1/4
010:2/4
011:3/4

关于浮点数的处理方法,可以查到很多书。

还有问题的话,可以发邮件到aidai2000@gmail.com
我不再在这里回贴了。

[此贴子已经被作者于2006-10-14 17:15:31编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案