2011-06-10 40 views
2

所以我有这个任务来模拟分配数据。它是这样的用int数组模拟数据分配

其一个int []数组,其在二进制元素组成分配表等:

INT [0] = 0xFF的= 1111 1111;

1被认为是自由和0分配

如果调用get()方法(还可以得到(INT),其中int是要分配的比特数),那么它找到的第一个块(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);
数据== 1100 0110

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

如何使用按位运算符和Integer.toBinaryString()方法实现此目的。 这是一个任务,所以我喜欢那里有更多的建议比实际的答案。希望我解释得很好。

回答

0

下面给出了我在我的二进制操作系统工具包中使用的两个有用函数。

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

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

基本上你检查是否一个给定的位由AND-ING与另一个int其中有你有兴趣集中的所有零,只有一位。结果值在每一位都有零,但只有在原始值中设置该位时才会设置该位。否则,该位为0(因为0和1为0)使整个结果为0.具有非零结果表示该位已设置。

若要设置一个位,您可以使用一个值,该值的每一位都为零,您要设置的位为1。这给出了一个结果,其中所有其他位与原始值相同,但是您想要设置的位为1。

使用此功能,您可以将任何int视为非常像32 boolean数组,并在任何位置设置或取消置位。