C# 有效地存储位索引
我想以位序列存储某些索引。位数是C# 有效地存储位索引,c#,32bit-64bit,bit,C#,32bit 64bit,Bit,我想以位序列存储某些索引。位数是 二,可以安全地假设最大索引为255(起始索引为0)。早些时候,我将每个索引存储为一个整数。但这占用了太多的内存 我想用些面具之类的东西 例如:如果我想存储索引0,3,5,那么我将101001即41存储为整数 问题是我拥有的最大索引是255,使用上述技术我可以存储索引 仅限64位(使用64位整数)。我还有别的办法吗 谢谢:-)您可以为每个位索引使用2位索引。 实际使用10位(索引从1到10,设置位0、4、8): 单一索引: i = 0100010001 Index
二,可以安全地假设最大索引为255(起始索引为0)。早些时候,我将每个索引存储为一个整数。但这占用了太多的内存 我想用些面具之类的东西 例如:如果我想存储索引0,3,5,那么我将101001即41存储为整数 问题是我拥有的最大索引是255,使用上述技术我可以存储索引 仅限64位(使用64位整数)。我还有别的办法吗
谢谢:-)您可以为每个位索引使用2位索引。 实际使用10位(索引从1到10,设置位0、4、8): 单一索引:
i = 0100010001
Index1 = i
两个综合指数:
i1 = 01000
i2 = 10001
Index2 = [i1, i2];
Index2.fragment_length = 5
排列
在伪代码中,检索或设置位
set(Index, bit) {
fragment = quotient(bit, Index.flagment_length); //quotient = integer division
bit_index = module(bit, Index.flagment_length); //index of the bit in the fragment
set(Index[fragment], bit-or(Index[Fragment], bit-shift-left(1 << bit_index))); //Set the bit indexes vector fragment with or-ing the appropriate bitmask
}
get(Index, bit) {
fragment = quotient(bit, Index.flagment_length); //quotient = integer division
bit_index = module(bit, Index.flagment_length); //index of the bit in the fragment
if (get(Index[fragment], bit-and(Index[Fragment], bit-shift-left(1 << bit_index))) > 0) then true else false; //Get the bit indexes vector fragment bit with and-ing the appropriate bitmask and return true or false
}
set(索引,位){
片段=商(位,索引.标记长度);//商=整数除法
bit_index=module(bit,index.flagment_length);//片段中位的索引
set(Index[fragment]、bit或(Index[fragment]、bit向左移位(1在java中,位索引变得简单,如下小教程所示…
此类实现一个按需增长的位向量。位集的每个组件都有一个布尔值。位集的位由非负整数索引。可以检查、设置或清除单个索引位。一个位集可用于通过逻辑AND、逻辑inclusive or和逻辑AND修改另一位集的内容独占或操作
默认情况下,集合中的所有位最初的值都为false
每个位集都有一个当前大小,即位集当前使用的空间位数。请注意,该大小与位集的实现有关,因此它可能会随实现而改变。位集的长度与位集的逻辑长度有关,并且与实现无关
除非另有说明,否则将null参数传递给位集中的任何方法都将导致NullPointerException。如果没有外部同步,则位集对于多线程使用是不安全的。.NET有一个用于此类操作的内置类:
这将使您能够高效地存储一串位(以布尔的形式)
您可以使用和
、或
、异或
和非
方法对位数组
执行逐位操作
您可以使用布尔、字节或整数初始化位数组
。例如,您可以使用00101100
初始化它,如下所示:
BitArray bits = new BitArray(new byte[] { 0x2C }); // 0x2C == 00101100
你用的是什么语言?那就用一个ulong数组。简单。或者是BitArray,但是有点慢。