找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 22707|回复: 59

[原创天地] 一、溢出基础知识之补码-WPE

  [复制链接]
  • TA的每日心情
    慵懒
    2018-5-27 17:09
  • 签到天数: 113 天

    [LV.6]常住居民II

    8

    主题

    245

    回帖

    1009

    积分

    高级会员

    积分
    1009
    Shurrik 发表于 2015-6-19 15:51:56 | 显示全部楼层 |阅读模式
    溢出,其实并不神秘!(以下阐述若有错误或不足之处,请勿喷我)
    所谓溢出,就是在计算机中,当要表示的数据超出计算机所使用的数据的表示范围。
    例如,计算机中只能表示0-9的数值范围,但是经过N次运算,导致运算中或结果出现超出范围的数值10,那么这个数值就溢出了(这里只是简单的类比,让大家理解溢出的概念,计算机中没有这么简单)。
    要讨论溢出,首先要明白数值在计算机中是如何表示的!
    ——计算机中的机器数以0和1组合的二进制代表数值。
    ——机器数(整数)分为有符号数和无符号数。
    ——一个有符号数有原码(与真值相同)、反码(数值位按位取反,符号位不变)和补码(补码=反码+1,原码=补码的反码+1)三种编码方式(当然还有其他的编码方式)。
    PS:以上三点最好理解一下。
    下面我们需要搞清楚3个问题:
    ①何为有符号数和无符号数?
    有符号数就是最高位表示数值的正负(最高位是0,表示正数,最高位是1,表示负数),
    例如,单字节 1001 0100 表示-20 , 单字节 0001 0100 表示+20。
    无符号数就是没有表示正负的位,都是数值位。
    例如,单字节 1000 0001 表示32769 , 单字节 0000 0001 表示1。
    因此,我们在游戏中游戏数值的范围(32位)是
    有符号时,00 00 00 00~FF FF FF FF 的数值范围是-2147483648(80 00 00 00)~+2147483647(7F FF FF FF)
    无符号时,00 00 00 00~FF FF FF FF 就是 0~4294967295
    这个范围就看程序员定义变量时是怎么定义的。
    ②如何理解补码?
    计算机在运算时,是采用真值的补码参与运算的。
    必记:补码=反码+1。
    例如,真值-20,补码 1001 0100,补码的反码1110 1011,原码=补码的反码+1=1110 1100(这里我为什么先写补码,再写反码,最后写原码?若是你答对了,那么你就理解了上面的内容了)
    ③补码的溢出运算?
    a.同符号数相加才可能溢出。
    例如,游戏中我们通过某种操作将获取铜币每次弄成负值:-100和-50(假设合理范围【红色部分】是-128~0~127,便于理解,游戏中肯定不可能是这样的),
    那么如何计算我们获取多少正的铜币呢?
    -100的补码是1001 1100
    -50  的补码是1100 1110
    2次相加为  1 0110 1010
    这里要理解2个地方:一是这种溢出会舍去超过8位的最高位1;二是符合位是0。
    所以得出的结果是+106,也就是获得106铜币,而不是-106.

    b.两正数之和的数值部分向符号位进位。
    例如,游戏中我们通过某种操作将获取铜币每次弄成负值:89和108(假设合理范围【红色部分】是-128~0~127,便于理解,游戏中肯定不可能是这样的),
    那么如何计算我们获取多少正的铜币呢?
    89   的补码是0101 1001
    108 的补码是0110 1100
    2次相加为    1100 0101
    最高符号位是1,表示结果溢出了,此时真值为-59.

    以上为溢出的基础知识,大家有问题可以在下面提问!
    知无不言言无不尽!******************************************************
    刚才有人说我不会,还出来给大家讲!
    再次重申:本人确实是菜鸟一个,但是我只是把我知道的教给大家!
    请不要用批判的态度来看待这段文字,要以学习的态度来看这段文字,你会豁然开朗,否则只会自取其辱!
    ******************************************************
    本人业余者一个,说错的地方还请谅解!下集更加精彩!

    评分

    参与人数 1游戏币 +2 收起 理由
    小小智慧数 + 2 游戏联盟-游戏技术

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    无聊
    2019-5-5 21:00
  • 签到天数: 477 天

    [LV.9]以坛为家II

    80

    主题

    919

    回帖

    7193

    积分

    论坛元老

    积分
    7193

    处女座猴年

    虫虫醉风 发表于 2015-6-19 16:07:28 | 显示全部楼层
    实在看不懂
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    84

    回帖

    121

    积分

    注册会员

    积分
    121
    qq6353694 发表于 2015-6-19 21:44:34 来自手机 | 显示全部楼层
    虽然看不明白,但是还是顶一下。。。。
    回复

    使用道具 举报

    该用户从未签到

    6

    主题

    107

    回帖

    581

    积分

    高级会员

    积分
    581
    虫虫♂微笑 发表于 2015-6-20 10:05:37 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    6

    主题

    107

    回帖

    581

    积分

    高级会员

    积分
    581
    虫虫♂微笑 发表于 2015-6-20 10:06:25 | 显示全部楼层
    50权限怎么这么难
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-1-21 22:28
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    45

    回帖

    176

    积分

    注册会员

    积分
    176
    虫虫♂黑天 发表于 2015-6-20 12:22:14 | 显示全部楼层

    虽然看不明白,但是还是顶一下
    回复

    使用道具 举报

  • TA的每日心情

    2016-3-22 01:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    59

    回帖

    628

    积分

    高级会员

    积分
    628
    QQ
    虫虫♂盘古 发表于 2015-6-20 23:45:55 | 显示全部楼层
    看不懂啊
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    15

    回帖

    138

    积分

    注册会员

    积分
    138
    569472150 发表于 2015-6-23 11:26:20 | 显示全部楼层
    看到这些眼睛有点花
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    回帖

    28

    积分

    新手上路

    积分
    28
    xsllg 发表于 2015-6-24 11:55:14 | 显示全部楼层
    看来不是给小白看的
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-11-19 13:21
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    22

    主题

    116

    回帖

    1545

    积分

    高级会员

    积分
    1545
    虫虫♂学习 发表于 2015-6-24 21:59:33 | 显示全部楼层
    继续学习
    回复

    使用道具 举报

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

    本版积分规则

    QQ|手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

    GMT+8, 2024-11-23 16:10 , Processed in 0.463406 second(s), 30 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

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