2011-06-10 57 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數組,並在任何位置設置或取消置位。