C# 中BigInteger的一种应用场景

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

前言

       用一个二进制字符串参数来表示多个状态位信息是一种节约空间的做法,比如三消游戏中的棋盘,每一个格子可能含有多种障碍或棋子,预先给每种障碍或棋子定义好编号,编号映射到二进制字符串上的索引,有出现就置为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);
              
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值