如何在内存中有效保存和访问大量5位数字?
例如 01100 01101 01110 01111 10000 10001
我稍后会转换为一个字节来检查它是什么号码?
我在考虑使用一个字节数组,但过了一段时间,这将浪费大量内存,因为这将是一个不断增长的数组。另外,我想要有效地保存这个数组。我只会使用5位。
答案 0 :(得分:0)
这是我在C中用于位数组实现的代码,在JAVA中它将是相同的,我必须重新考虑我对列表所说的内容,也许数组会更好。
无论如何,您将数组视为连续的位段。这些函数设置,获取和读取数组的第k位。在这种情况下,我使用的是整数数组,所以你看到'32',你是使用一个字节数组,然后你使用'8'。
void set_bit(int a[], int k)
{
int i = k / 32;
int pos = k % 32;
unsigned int flag = 1; // flag = 0000....00001
flag = flag << pos; // flag = 0000...00100..0000
a[i] = a[i] | flag; // set the bit at the k-th position in a[i]
}
void clear_bit(int a[], int k)
{
int i = k / 32;
int pos = k % 32;
unsigned int flag = 1; // flag = 0000....00001
flag = flag << pos; // flag = 0000...00100..0000
flag = ~flag;
a[i] = a[i] & flag; // set the bit at the k-th position in a[i]
}
int test_bit(int a[], int k)
{
int i = k / 32;
int pos = k % 32;
unsigned int flag = 1; // flag = 0000....00001
flag = flag << pos; // flag = 0000...00100..0000
if (a[i] & flag) // test the k-th bit of a to be 1
return 1;
else
return 0;
}
我不知道你如何存储五位数,你必须逐位插入它们,并且还要跟踪位数组中的最后一个空位。
答案 1 :(得分:0)
“我正在考虑使用一个字节数组,但过了一段时间,这会浪费大量内存,因为这将是一个不断增长的数组。”
我遇到了类似的问题,决定写一个基于BitInputStream和BitOutputSteam的文件。因此,内存耗尽不再是问题。请注意,给定的链接不是我的工作,而是如何编写位输入/输出流的好例子。