前言
用一个二进制字符串参数来表示多个状态位信息是一种节约空间的做法,比如三消游戏中的棋盘,每一个格子可能含有多种障碍或棋子,预先给每种障碍或棋子定义好编号,编号映射到二进制字符串上的索引,有出现就置为1;最后将这个二进制串转换为十进制的数值,就得到了一个长度短的多的字符串,做持久化或序列化时就大大减少了对空间的占用;这是一个经典的用时间换空间的操作,不过这个十进制数值可能非常大,远远超出一般数值类型的范围,所以就需要用到BigInteger 类型。
BigInteger介绍
类型 BigInteger 是一个不可变类型,表示一个任意大整数,其值在理论上没有上限或下限。具体的说明在微软官网上有很详尽的介绍,这里就不敷述了;需要注意的是BigInteger如果操作不当是很浪费内存空间的,不适合在循环中对BigInteger类型进行数学运算,因为每次运算都会创建一个新的BigInteger对象。
代码示例
// 初始化标记列表
var flags = new List<bool>();
for (int i = 0; i < 100; i++)
{
flags.Add(false);
}
// 生成一个大数
BigInteger number = BigInteger.Multiply(Int64.MaxValue, 3);

文章介绍了如何利用二进制字符串节省空间表示游戏中的状态位信息,使用BigInteger处理超出常规整数范围的大数值,指出BigInteger的性能问题和注意事项,以及在C#中安装System.Numerics库的方法。
最低0.47元/天 解锁文章
488





