[求助] 数据重现一书中看不懂的地方

[复制链接]
  • TA的每日心情
    开心
    2021-4-18 05:49
  • 签到天数: 41 天

    [LV.5]六品通判

    25

    主题

    460

    回帖

    794

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    794
    发表于 2011-12-10 12:00:21 | 显示全部楼层 |阅读模式
    我画红线的部份是我看不懂的地方,希望网友能给详细说一下,最好给举个例子详细算一下。谢谢了。。。。。。。。。。。。


    附图如下:


                                                     簇流负数运算1.JPG
  • TA的每日心情
    开心
    2021-4-18 05:49
  • 签到天数: 41 天

    [LV.5]六品通判

    25

    主题

    460

    回帖

    794

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    794
     楼主| 发表于 2011-12-10 12:17:23 | 显示全部楼层
    顶起来。。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-4-18 05:49
  • 签到天数: 41 天

    [LV.5]六品通判

    25

    主题

    460

    回帖

    794

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    794
     楼主| 发表于 2011-12-11 08:24:27 | 显示全部楼层
    哪位明白的,请说一下。。。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2012-9-25 21:37
  • 签到天数: 1 天

    [LV.1]布衣百姓

    7

    主题

    62

    回帖

    43

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    43
    发表于 2011-12-12 21:51:54 | 显示全部楼层
    举例子太长。从网上找了一段负数补码的例子的你看一下。至于是说在32bit时为什么要变成0xFFFFFFF2,只是为了补足位数。从而满足补码的需要

    计算机本身是用二进制进行计算。对于负数,需要进行补码。举例来说,+8在计算机中表示为二进制的1000,那么-8,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000
    计算机内部采用2的补码(Two's Complement)表示负数。

    什么是2的补码?

    它是一种数值的转换方法,要分二步完成:

    第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,00001000的相反值就是11110111。

    第二步,将上一步得到的值加1。11110111就变成11111000。

    所以,00001000的2的补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。

    2的补码的好处

    首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种最方便的方式。

    2的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。

    还是以-8作为例子。

    假定有两种表示方法。一种是直觉表示法,即10001000;另一种是2的补码表示法,即11111000。请问哪一种表示法在加法运算中更方便?

    随便写一个计算式,16 + (-8) = ?

    16的二进制表示是 00010000,所以用直觉表示法,加法就要写成:

     00010000
    +10001000
    ---------
     10011000

    可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。

    现在,再来看2的补码表示法。

     00010000
    +11111000
    ---------
    100001000

    可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是16 + (-8) 的正确答案。这说明了,2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。

    2的补码的本质

    在回答2的补码为什么能正确实现加法运算之前,我们先看看它的本质,也就是那两个步骤的转换方法是怎么来的。

    要将正数转成对应的负数,其实只要用0减去这个数就可以了。比如,-8其实就是0-8。

    已知8的二进制是00001000,-8就可以用下面的式子求出:

     00000000
    -00001000
    ---------

    因为00000000(被减数)小于0000100(减数),所以不够减。请回忆一下小学算术,如果被减数的某一位小于减数,我们怎么办?很简单,问上一位借1就可以了。

    所以,0000000也问上一位借了1,也就是说,被减数其实是100000000,算式也就改写成:

    100000000
    -00001000
    ---------
     11111000

    进一步观察,可以发现100000000 = 11111111 + 1,所以上面的式子可以拆成两个:

     11111111
    -00001000
    ---------
     11110111
    +00000001
    ---------
     11111000

    2的补码的两个转换步骤就是这么来的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2012-9-18 11:30
  • 签到天数: 22 天

    [LV.4]七品知县

    30

    主题

    719

    回帖

    468

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    468
    发表于 2011-12-13 21:29:20 | 显示全部楼层
    我看都看晕了,楼上的还能解释(38:
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-4-18 05:49
  • 签到天数: 41 天

    [LV.5]六品通判

    25

    主题

    460

    回帖

    794

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    794
     楼主| 发表于 2011-12-14 09:05:46 | 显示全部楼层
    非常驻感谢4楼,说的这么详细,我会慢慢看消化理解的的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    134

    回帖

    190

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    190
    发表于 2011-12-19 07:57:26 | 显示全部楼层
    数据重现这本书,楼主是电子版的还是在新华书店买的.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-24 08:09
  • 签到天数: 3442 天

    [LV.Master]三朝元老

    1

    主题

    3736

    回帖

    1万

    积分

    [INTOHARD]旅长

    Rank: 9Rank: 9Rank: 9

    积分
    16917
    发表于 2011-12-19 22:41:29 | 显示全部楼层
    头晕,天文数字
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    112

    回帖

    691

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    691
    QQ
    发表于 2011-12-20 21:37:23 | 显示全部楼层
    呵呵,如果是负数的话转化成二进制然后反码加一就行了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    170

    回帖

    8952

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    8952
    发表于 2011-12-20 21:59:03 | 显示全部楼层
    这个是数据走向,且DATA RUN是负数
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表