C# 将数字转换为最小长度BitArray的最快实现方法是什么
C# 实现数字转最小长度BitArray的方案
默认通过int数组初始化BitArray时,会自动按照int的32位固定长度生成,要得到仅保留有效位的最小长度实例,可以用以下两种方法实现:
方法1:直接构造最小长度实例(性能最优)
先计算数字的最小有效位长度,再逐位赋值生成BitArray,代码示例:
public static BitArray CreateMinimalBitArray(int number) { // 0值特殊处理,最小需要1位存储 if (number == 0) { return new BitArray(1, false); } // 计算所需最小位数 int minLength = (int)Math.Log(number, 2) + 1; BitArray result = new BitArray(minLength); for (int i = 0; i < minLength; i++) { result[i] = (number & (1 << i)) != 0; } return result; }
效果验证:
- 传入数值9:计算得到最小长度为4,生成4位BitArray,对应二进制
1001 - 传入数值260:计算得到最小长度为9,生成9位BitArray,对应二进制
100000100
方法2:截断已有全长度BitArray
如果已经生成了默认的32位BitArray,可以直接截断到最高有效位的位置:
// 原有生成全长度BitArray的代码 BitArray tooBig = new BitArray(new int[] { 9 }); int minLength = tooBig.Length; // 从最高位往前找第一个有效位 while (minLength > 1 && !tooBig[minLength - 1]) { minLength--; } // 直接修改Length属性完成截断 tooBig.Length = minLength;
注意:如果需要处理负数、long类型大数字,仅需调整入参类型和最小长度计算逻辑即可,负数场景可根据业务需求判断是否额外保留1位符号位。
内容的提问来源于stack exchange,提问作者AdrAs
相关产品推荐
相关产品推荐

