背景:
阅读文章

LPC基础数据类型--int

[日期:2008-12-25] 来源:  作者: [字体: ]
int类型表示一个整数,我想每个巫师都知道这个答案,但是我想更深入点讨论:

int 表示的范围是多少?

int在内存中占多少空间?

使用常量对int赋值的形式除了int i = 0;之外,还有哪些?

-2用2进制表示是什么样的?

如果定义一个int,它的值十六进制形式是0xFFFFFFFF?

可以对int进行操作的运算符除了+-*/%外有哪些?


如果我要对很大很大的数(远远超过一个int所能表示的返回)进行四则混合运算,怎么办?

1,int就是32bit,最高位是符号位。范围就使-2^31- 2^31,大约21亿多点。。。
为什么一些mud要对银行的存款设置上限呢?银行的最小单位是coin,1gold = 10000
10000gold就上了亿了。。。
战斗的溢出也是常见的,这个就需要各个巫师自己控制了。。。

0xFFFF 这个是32bit

还有逻辑运算

显然,先除,减
常见是xyj的叛师,溢出,呵呵。先乘后除,溢出

说到这个溢出,作为巫师还要注意点的是命令参数。
sscanf或atoi,最好有个下限,上限的判断。因为,玩家找这些漏洞,是非常拿手的。。。
 
避免int溢出,调整运算次序是治标。是没有办法的办法。做不到扩大数据范围,只能这样了。

至于一点点误差,常常可以忽略的。除的数值是100,那么这个误差也是控制在100以内了。

所以常常有:if a > 10000 那么先除后乘 否则就先乘后除 (当然除数是100,很多情况如此)
这样做的目的,也是减少误差带来的影响。
 
我想不出治本的方法,即便是到了64位,如果不注意排列顺序,也可能溢出的
64位的...
2的64次方等于18446744073709551616
运算的时候不可能算到这么大的数的吧?

用int * 也是一种方法,只是相应的运算全部要改。

基本上等支持到64位就没有多大问题了,或者LPC里面多一种数据类型,long型。
收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论