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,最好有个下限,上限的判断。因为,玩家找这些漏洞,是非常拿手的。。。
为什么一些mud要对银行的存款设置上限呢?银行的最小单位是coin,1gold = 10000
10000gold就上了亿了。。。
战斗的溢出也是常见的,这个就需要各个巫师自己控制了。。。
0xFFFF 这个是32bit
还有逻辑运算
显然,先除,减
常见是xyj的叛师,溢出,呵呵。先乘后除,溢出
说到这个溢出,作为巫师还要注意点的是命令参数。
sscanf或atoi,最好有个下限,上限的判断。因为,玩家找这些漏洞,是非常拿手的。。。
避免int溢出,调整运算次序是治标。是没有办法的办法。做不到扩大数据范围,只能这样了。
至于一点点误差,常常可以忽略的。除的数值是100,那么这个误差也是控制在100以内了。
所以常常有:if a > 10000 那么先除后乘 否则就先乘后除 (当然除数是100,很多情况如此)
这样做的目的,也是减少误差带来的影响。
至于一点点误差,常常可以忽略的。除的数值是100,那么这个误差也是控制在100以内了。
所以常常有:if a > 10000 那么先除后乘 否则就先乘后除 (当然除数是100,很多情况如此)
这样做的目的,也是减少误差带来的影响。
我想不出治本的方法,即便是到了64位,如果不注意排列顺序,也可能溢出的
64位的...
2的64次方等于18446744073709551616
运算的时候不可能算到这么大的数的吧?
用int * 也是一种方法,只是相应的运算全部要改。
基本上等支持到64位就没有多大问题了,或者LPC里面多一种数据类型,long型。
2的64次方等于18446744073709551616
运算的时候不可能算到这么大的数的吧?
用int * 也是一种方法,只是相应的运算全部要改。
基本上等支持到64位就没有多大问题了,或者LPC里面多一种数据类型,long型。