请选择 进入手机版 | 继续访问电脑版

DNF阿拉德游戏论坛

 找回密码
 立即注册
地下城公益服 复古的阿拉德大陆,经典怀旧列车马上发车! 开始游戏 70DNF版本 免费点券泡点送,深渊装备随你刷! 开始游戏
今日新开60版 最新定制60版本DNF 上线满级 福利丰厚 永久服务器 开始游戏 2021新年特惠10怒气/天,充值最多赠送35%! 自助购买
86定制版本 白嫖服PK平衡长久服 开始游戏 极致仿官100 ▍1:1国服▲全职三觉平衡▲长久耐玩▍ 开始游戏
60独家公益服 长久▍天空1金币▍点卷刷怪爆▍无抽奖▍多劳多得▍ 开始游戏 2021新年特惠10怒气/天,充值最多赠送35%! 自助购买
2021新年特惠10怒气/天,充值最多赠送35%! 自助购买 2021新年特惠10怒气/天,充值最多赠送35%! 自助购买
2021新年特惠10怒气/天,充值最多赠送35%! 自助购买 重生70纯复古 DNF70满级版本:玩法复古,上手简单,轻松找回童年! 开始游戏
备案老域名 SEO排名专用:COM 53元/年,CN域名 26元/年 限时活动 开始游戏 推广优化工具 引流大数据营销监控,搜索引擎、抖音、知乎内参 开始游戏
菜菜60版本 不删档测试,9月11号正式开服,新手上线送SS武器 开始游戏 免费加速器 访问google,youtube,免费试用2小时! 开始游戏
★腾讯云活动★ 1核2G 88/年,2核4G 230/年,最高送588 开始游戏 SF开服一条龙 DNF开服一条龙100元起:价格低,品质高,讲信誉! 开始游戏
★阿里云活动★ 1H2G1M 84/年,2H4G3M 221/1年,新人送礼 开始游戏 信用卡办理 城市银行京东白条内部通道,无需电核秒下卡! 开始游戏
查看: 16|回复: 1

计算机专业玩家分析破败之王BUG原理:原码和补码问题

[复制链接]

签到天数: 7 天

[LV.3]阿拉德菜鸟

10

主题

13

帖子

98

积分

阿拉德菜鸟

Rank: 2

积分
98
怒气
28
声望
22
战力
13
发表于 2021-3-12 00:50:06 | 显示全部楼层 |阅读模式
计算机专业玩家分析破败之王BUG原理:只是一个简单的原码和补码的问题,有多少人看懂了??[泪奔]

“65534,计算机专业才能反应过来,2的16次方就是65536!

根据这个数字,可以断定杀人戒的层数是用一个二进制的值表示,用16bit的内存来记录的。

如果是1层杀人戒,内存里存的就会是:
0000000000000001,16位,最后一位是1。

2层,就是0000000000000010。

破败之王击杀敌方英雄,戒指本应该是+2的,但是却变成了65534,在内存中表示1111111111111110。

这时候就要引入另一个概念,补码。

前面所说的都是原码,是不能表达负数的。而表达负数,就要用补码了。

65534用原码表示时内存里是1111111111111110,而1111111111111110这一坨二进制内存,如果用补码表示,它代表的值就是-2!

这个就是关键了!65534和-2在不同的编码方式中,所对应的二进制是一样的。

再想一下杀人戒的属性,杀人应该是+2的,但是此时破败之王变成了敌方单位,是不是这里的代码有bug,将+2就给算成了-2?

然后算戒指层数的时候,程序员用的是补码,-2就是1111111111111110。

而读取戒指层数时,另一个程序员却用了原码,1111111111111110就读取成了65534(原码和补码在表示比较小的正数时是完全一样的,所以正常情况下戒指层数也不会读错)。

这样就完全对的上了。

溢出了的话不应该是65534,出现65534应该就是我描述的这样了,程序本身有bug,原码和补码也用混了”。

这么看来,这种严重的BUG,竟然只是因为程序员一个简单的错误,有些离谱。

大家这波看懂了吗?非专业人士表示看几遍都是懵懵懂懂!![泪奔][泪奔]




“啊!令人怀孕的故乡!”——凯莉
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。

签到天数: 14 天

[LV.3]阿拉德菜鸟

33

主题

36

帖子

239

积分

阿拉德玩家

Rank: 3Rank: 3

积分
239
怒气
68
声望
51
战力
33
发表于 2021-3-12 00:50:55 | 显示全部楼层
跟补码源码没关系,C++从内存读int全都是补码方式读出来的。这个bug的根本原因是:声明的时候,c++ 里,是uint16_t,所以最高位的1代表的不是+/-,就是2*15。程序在下面跑下就完事了。
“啊!令人怀孕的故乡!”——凯莉
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|DNF阿拉德游戏论坛 ( 渝ICP备13007431号1

GMT+8, 2021-4-11 20:50 , Processed in 0.223049 second(s), 14 queries , File On.

Powered by Discuz! X3.3 网站地图 标签大全 Auther by PAnoEAde & 地下城与勇士论坛

© 2001-2013 Comsenz Inc.

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