找回密码
 立即注册
查看: 29454|回复: 59

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

  [复制链接]

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 游戏联盟-游戏技术

查看全部评分

本帖被以下淘专辑推荐:

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权限怎么这么难
回复

使用道具 举报

1

主题

45

回帖

176

积分

注册会员

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

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

使用道具 举报

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 | 显示全部楼层
看来不是给小白看的
回复

使用道具 举报

22

主题

116

回帖

1545

积分

高级会员

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-19 14:45 , Processed in 2.602800 second(s), 30 queries .

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

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