《梦幻西游》电脑版官方论坛

标题: █►知识贴◄█对死后血量爆发上亿的解释 [打印本页]

作者: 相思の笨笨    时间: 2007-10-22 17:09
标题: █►知识贴◄█对死后血量爆发上亿的解释
大家好
先请大家看这个帖子: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 编辑 ]
作者: 84264661    时间: 2007-10-22 17:11
- -基本没看懂
作者: 123456789    时间: 2007-10-22 17:16
知识帖必须顶 然后必须给分
作者: 欣蒂蕊拉    时间: 2007-10-22 17:17
这个那个  那个这个....路过....
作者: lindowking    时间: 2007-10-22 17:18
我学的那几年知识都丢完了.............现在看不懂了...............
作者: olmm01    时间: 2007-10-22 17:19
楼主一定辛苦了
作者: 123456789    时间: 2007-10-22 17:21
把知识换给老师  是我们小学毕业的唯一一点社会贡献
作者: 玄了又玄    时间: 2007-10-22 17:22
懂了
作者: 小翔♂猴猴    时间: 2007-10-22 17:22
辛苦了
作者: №神情天子§    时间: 2007-10-22 17:23
根本就没看
作者: popoggg    时间: 2007-10-22 17:23
忘了 都忘了
作者: 高兴你就拍拍手    时间: 2007-10-22 17:33
不错不错★很好
作者: 相思の笨笨    时间: 2007-10-22 17:47
自己偷偷顶下~
作者: 发霉哒幽幽    时间: 2007-10-22 17:48
好多字
作者: 皇朝de伯爵    时间: 2007-10-22 17:56
又学了点,顶起
作者: ″。闹「哟、    时间: 2007-10-22 17:59
啥是电脑编程``
作者: li86720229da    时间: 2007-10-22 18:02

作者: 274558436    时间: 2007-10-22 18:11
很好。,强大。。。第1次看到
作者: 【青龙】    时间: 2007-10-22 18:14
你很牛
作者: 猪脚拉面    时间: 2007-10-22 18:27
厉害  懂不懂都看完了
作者: →洛可可←    时间: 2007-10-22 19:07
看了迷糊ING
作者: zc221222    时间: 2007-10-22 19:20
看明白了,红字好刺眼
作者: 神а⑧管じā    时间: 2007-10-22 19:23
好几年没编程了
都忘记了
作者: 相思の笨笨    时间: 2007-10-22 20:25
大家来看看啊
作者: 死士    时间: 2007-10-22 20:33
看来这些知识  不容易懂
作者: crong1    时间: 2007-10-22 20:52
老师没白教你
作者: 黑糊糊黑黑糊    时间: 2007-10-22 20:53
分分给过了
作者: 那什么    时间: 2007-10-22 20:53
有点意思
作者: ghostbeauty2006    时间: 2007-10-22 21:09
标题: 顶个吧
我看了红字,没看懂,然后坚持不看其他的就飘走了
作者: 天才没得说    时间: 2007-10-22 21:19
基本上可以理解了
作者: aoyanming    时间: 2007-10-22 21:23
看不懂
作者: 空灵侠剑    时间: 2007-10-23 08:38
标题: 回复 #1 相思の笨笨 的帖子
签名不错,兰兰的
作者: fei4455c    时间: 2007-10-23 08:51
看到数字我昏了过去
头好大
作者: 相思の笨笨    时间: 2007-10-23 11:28
自己偷偷顶下 陶醉于自己的数学天才中...  无限YYing...

[ 本帖最后由 相思の笨笨 于 2007-10-23 11:31 编辑 ]
作者: ws01401366    时间: 2007-10-23 11:36
小学我就知道了
作者: 相思の笨笨    时间: 2007-10-23 11:43
原帖由 ws01401366 于 2007-10-23 11:36 发表
小学我就知道了


你学习一定很好 或者说是兴趣等...嗯 很强大 可以参加小学奥赛了
作者: 小づ佐    时间: 2007-10-23 11:45
我很赞同……
作者: phoebe    时间: 2007-10-23 12:56
知识就是力量~
作者: ganyudi123    时间: 2007-10-23 12:57
不懂`
不过很好很强大
作者: longlovepanpan    时间: 2007-10-23 12:59
电脑高手`
作者: 巧菲儿    时间: 2007-10-23 13:22
100w的血其实是怪的血。。喜欢用修改器改RPG游戏的都知道。。他们的数值和人的血量数值是一样的
作者: 相思の笨笨    时间: 2007-10-23 16:07
原帖由 巧菲儿 于 2007-10-23 13:22 发表
100w的血其实是怪的血。。喜欢用修改器改RPG游戏的都知道。。他们的数值和人的血量数值是一样的


我不知道整个MH中血最多的是啥 比如个别必死剧情的BOSS等 或者155J的血鬼? 蚩尤? 但我觉得 貌似2的20次方就足够表示了吧?...要是不够的话(比如个别必死剧情的BOSS) 干脆设置为无敌即可...

[ 本帖最后由 相思の笨笨 于 2007-10-23 16:09 编辑 ]
作者: 心恋☆亦菲    时间: 2007-12-1 18:59
基本上
没看懂
因为我没看
作者: 心恋☆亦菲    时间: 2007-12-1 19:03
if (血量<0)
{
死亡;
血量=0;
}
else
{
GOON...
}



GOON是啥意思
作者: elsu0    时间: 2007-12-2 08:57
标题: 回复 #1 相思の笨笨 的帖子
那啥.....飘过
作者: 狐子    时间: 2007-12-2 10:08
楼主辛苦顶一个!
作者: 心灵の轨迹    时间: 2007-12-2 10:27
看不懂
作者: 蔡琰    时间: 2007-12-2 10:31
受教了...~才发现有好多好玩的..
作者: 小翔♂猴猴    时间: 2007-12-2 10:34
那………
作者: 幽冥信差    时间: 2007-12-2 10:35
我看不懂
知识没学好。。。
作者: dt1994116    时间: 2007-12-2 10:35
前面的补码什么的看不懂,但看到后面那-15的2进制什么的就懂了
作者: oΟ尕沫oΟ    时间: 2007-12-2 10:35
飘过
作者: 低調√睡覺啦    时间: 2007-12-2 11:39
實話說...
不懂.....
作者: 苦命的小弟    时间: 2008-3-31 15:09
又学了点,顶起
作者: 。/小和尚    时间: 2008-3-31 15:15
看不懂
作者: _嘘嘘°    时间: 2008-3-31 15:23
我一直都说,玩梦幻的人才,忒多了
作者: 相思の笨笨    时间: 2008-3-31 17:48
我靠 半年前我的帖子被顶起了
作者: 263944380    时间: 2008-3-31 19:02

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




欢迎光临 《梦幻西游》电脑版官方论坛 (http://xyq.netease.com/) Powered by Discuz! X3.3