查看: 3228|回复: 72
打印 上一主题 下一主题

█►知识贴◄█对死后血量爆发上亿的解释

[复制链接]
跳转到指定楼层
楼主
发表于 2007-10-22 17:09:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式 来自:山东
大家好
先请大家看这个帖子:http://xyq.netease.com/viewthread.php?tid=429731&extra=&page=1
我是这个帖子的11楼 前2次回复中 我粗略解释了下这种现象的原因
今天 从2进制数字的角度 给出全面解释
(如果你很忙 看红字就够了)

一.理论是很强大的
首先我们学习下二进制数字的表示.
1.二进制数字是用0和1表示某个数字的一种方法.二进制是计算技术中广泛采用的一种数制。二进制数是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数也是采用位置计数法,其位权是以2为底的幂。比如,1的二进制是1 2的二进制是10 3的二进制是101...
具体请参考BAIDU以及计算机入门教材

2.随着计算机的发展 由于涉及到了负数 普通的二进制已经不能满足人们的需求 所以 现在计算机普遍使用的是补码
关于补码 下面给出网上的一段很好的解释:
在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
补码与原码的转换过程几乎是相同的。
数值的补码表示也分两种情况:
(1)正数的补码:与原码相同。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码
0000111按位取反为1111000;再加1,所以-7的补码是11111001。

已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取
反,然后再整个数加1。
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负
数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。



二.具体问题具体分析
在原帖中 LZ血量为4294967280 (二进制为1111 1111 1111 11111111 1111 1111 0000 ) 而2的32次方,即32个1,表示的最大数字为4294967295(这里MH程序没有考虑首位符号位 4294967295=1111 1111 1111 1111 1111 1111 1111 1111)(这里 我们能猜测出 MH中 用32个二进制位来表示人物或者怪物等的血量 除了第一位是必须的表示正负的外 正常的话MH中理论上最大血量为2的31次方) 除去补码第一位表示正负 我们可以知道 LZ的血量这时应该是-15(1111 1111 1111 1111 1111 1111 1111 0000-1111 1111 1111 1111 1111 1111 1111 1111=0000 0000 0000 0000 0000 0000 0001 0000=-15)(以前帖子有误 说是-16)

正常的话 血量一旦为负 人物即死亡 这里问题出现了:人物死亡后 在人的思维中 HP=0
但在这里机器(MH服务器)它判定了人物死亡 但还是坚持着 这个人的血不是0 而是-15 而-15是如何用补码表示的呢 正是:1111 1111 1111 11111111 1111 1111 0000 (注意 这里红色的1 表示负号) 这样表示 也没什么不妥 只能说是这段程序有点不负责任 懂得编程的朋友应该知道 在这里 加个判定血量是否大与0的if语句即可了

if (血量<0)
{
死亡;
血量=0;
}
else
{
GOON...
}


但这里,MH服务器在继续了上面那个不大不小的错误的同时,犯了一个严重的错误:它没有把-15的补码先转换为原码 再转化为给玩家看的十进制数 而是直接把1111 1111 1111 11111111 1111 1111 0000 这样一个天文数字转换位了十进制数 于是 LZ的血 爆发了
(如果你很忙 看这段红字就够了)
三.写在最后
1.这个问题也许不是什么严重的BUG 但是却反映了一个游戏的品质 起码是内部程序的严谨性
2.这个问题对一般人来说 是很简单的 不要被庞大的数字吓倒
3.我分析出了在MH中 血量最大是2的31次方 我觉得 策划需要考虑下这个问题了 正常情况下 有人(即使是血鬼)能达到这个血量么? 2的20次方是1048576 100W的血 这个数量级已经足够了吧?希望能把节余的十几位资源省下来 为我们玩家多多做些实事
4.我不是WY的程序员 欢迎批评 指正 不要骂人 谢谢合作
觉得可以的 可以顶顶 或者给个分分

[ 本帖最后由 相思の笨笨 于 2007-10-22 18:19 编辑 ]

评分

参与人数 13人气 +40 收起 理由
wzg060123 + 2
tikki + 1
巧菲儿 + 1
sunhg1983 + 5
小づ佐 + 5
﹏绣気℡豬ミ + 5
天才没得说 + 5
黑糊糊黑黑糊 + 1
死士 + 5
【青龙】 + 3

查看全部评分

收藏收藏 分享淘帖 支持支持 反对反对 赞赞(0)
【论坛近期活动汇总】
回复

使用道具 举报

73
发表于 2011-9-16 22:05:08 | 只看该作者 来自:四川
这样的帖子都没菁华
回复 支持 反对

使用道具 举报

头像被屏蔽
72
发表于 2011-2-18 17:18:18 | 只看该作者 来自:浙江
提示: 该帖被管理员或版主屏蔽
回复 支持 反对

使用道具 举报

71
发表于 2011-2-18 17:12:34 | 只看该作者 来自:江苏
传说中的电脑高手阿
回复 支持 反对

使用道具 举报

70
发表于 2011-2-18 17:10:49 | 只看该作者 来自:上海
我表示我的计算机知识都还给老师了
回复 支持 反对

使用道具 举报

69
发表于 2011-2-18 17:10:01 | 只看该作者 来自:黑龙江
我没看你写什么 我就是一打酱油的
回复 支持 反对

使用道具 举报

68
发表于 2011-2-18 17:07:18 | 只看该作者 来自:吉林
.  果断顶了。 真技术技术帖阿。
回复 支持 反对

使用道具 举报

67
 楼主| 发表于 2011-2-18 17:01:18 | 只看该作者 来自:山东
自己N年前的坟 被挖了
回复 支持 反对

使用道具 举报

66
发表于 2011-2-18 16:55:11 | 只看该作者 来自:江苏
你这么写有意思么。。。 给懂的人看 感觉你写的 完全没必要, 给不懂得人看 人家完全看不懂。。。。。。
回复 支持 反对

使用道具 举报

65
发表于 2011-2-18 16:34:31 | 只看该作者 来自:山东
看不懂。我落后了。。
回复 支持 反对

使用道具 举报

64
发表于 2008-3-31 20:39:53 | 只看该作者 来自:浙江
看不懂
回复 支持 反对

使用道具 举报

63
发表于 2008-3-31 19:51:03 | 只看该作者 来自:福建
    ..  知识?
回复 支持 反对

使用道具 举报

62
发表于 2008-3-31 19:41:41 | 只看该作者 来自:安徽
我那个汗啊``
回复 支持 反对

使用道具 举报

61
发表于 2008-3-31 19:36:46 | 只看该作者 来自:浙江
朏斅祏昉倕晊郿槃惔敱郤顗龢晞鞟蹠镌皜壈伣暠鬚玠廙乂缊敳袴醖摛虓紞亹舋甝暅彧捨颙訏憕亶濛觯埳轝篨槨瓘骃曡擿寔臿彖蹠珪燋衜勣歊暕纮慼媟朓瑍醆妳祢瀺灂臛甒眎龡龢龣龤龥龜龝龞龎龏龐龑龒龓龔龕龖龗龘齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾齿龀龁龂龃龅龆龇龈龉龊龋龌齋齌齍齎齏齑鼼鼽鼾鼿齀齁齂齃齄齅齆齇齈齉鼡鼢鼣鼤鼥鼦鼧鼨鼩鼪鼫鼬鼭鼮鼯鼰鼱鼲鼳鼴鼵鼶鼷鼹鼺鼔鼕鼖鼗鼘鼙鼚鼛鼜鼝鼞鼟鼏鼐鼑鼒黿鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼋鼌鼍黺黻黼黒黓黔黕黖黗黙黚黛黜黝點黟黠黡黢黣黤黥黦黧黨黩黪黫黬黭黮黯黰黱黲黳黴黵黶黷黸黎黏黐黅黆黇黈黉黊黌黋麼麽麾麾麽麿黀黁黂麧麨麩麪麫麬麭麮麯麰麱麲麳麴麵麶麷麸麹麺麀麁麂麃麄麅麆麇麈麉麊麋麌麍麎麏麐麑麒麓麔麕麖麗麘麙麚麛麜麝麞麟麠麡麢麣麤鹶鹷鹸鹹鹺鹻鹼鹽鹾鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳹鳸鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂鵃鵄鵆鵅鵄鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡鷢鷣鷤鷥鷦鷧鷨鷧鷦鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷲鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸟鸠鸢鸤鸥鸦鸧鸨鸩鸪鸫鸬鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鹀鹁鹂鹃鹄鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴魛魜魝魞魟魠魡魣魢魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱼鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺鱻鱽鱾鱿鲀鲁鲂鲃鲄鲆鲅
回复 支持 反对

使用道具 举报

头像被屏蔽
60
发表于 2008-3-31 19:28:14 | 只看该作者 来自:贵州
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则