使用int数组模拟数据分配

时间:2011-06-10 03:53:08

标签: java binary bit-manipulation

所以我有这个分配来模拟分配数据。它就像这样

它是一个int []数组,其二进制元素构成分配表,如:

int [0] = 0xFF = 1111 1111;

1被认为是免费的,0被分配

如果你调用get()方法(也是get(int),其中int是要分配的位数),那么它找到第一个“free”空间块并将值更改为0. free() (free(int numbits)或free(int numbits,int fromIndex))将位更改回1.示例:

data == 1111 0011
x.get(3);
data == 0001 0011
x.get(2);
data == 0001 0000
x.get();
data == 0000 0000
x.free(2);
data == 1100 0000
x.free(2,5);
data == 1100 0110

int数组中的所有元素都被推到一起,所以如果是2个元素,则二进制表示将是16 1位。分配必须能够在数组中的所有元素中发生。

如何使用按位运算符和Integer.toBinaryString()方法完成此操作。 这是一项任务,所以我希望有更多建议而不是实际答案。希望我解释得很好。

1 个答案:

答案 0 :(得分:0)

下面给出了我的工具箱中用于二进制操作的两个有用的函数。

boolean isSet(int value, int bit){
   return (value&(1<<bit))!=0;
}  

int setBit(int value, int bit){
   return value|(1<<bit);
}

基本上,你检查一个给定位是否通过与另一个int进行AND运算来设置,该int具有全零并且只有您感兴趣的位设置。结果值在每个位中都为零,但只有在原始值中设置时才会设置该位。否则该位为0(因为0和1为0)使得整个结果为0.具有非零结果意味着该位已设置。

要设置一个位,只需将其设置为每个位都为零的值,并在要设置的位中设置为1。这给出了一个结果,其中所有其他位与原始值相同,但在您要设置的位中为1。

使用此功能,您可以将任何boolean视为大小为32 {{1}}的数组,并在任何位置设置或取消设置位。