大家好,我在理解Bentley經典編程珍珠中的bitsort程序時遇到了問題。我是Bitmask和Bitset的新手,所以我無法理解這些概念。 其實計劃是「如何整理磁盤文件?」,所以下面的代碼是如何在Java中編寫比特排序程序?
#include <stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void set(int i) {
a[i>>SHIFT] |= (1<<(i & MASK));
}
void clr(int i) {
a[i>>SHIFT] &= ~(1<<(i & MASK));
}
int test(int i){
return a[i>>SHIFT] & (1<<(i & MASK));
}
int main()
{ int i;
for (i = 0; i < N; i++)
clr(i);
/* Replace above 2 lines with below 3 for word-parallel init
int top = 1 + N/BITSPERWORD;
for (i = 0; i < top; i++)
a[i] = 0;
*/
while (scanf("%d", &i) != EOF)
set(i);
for (i = 0; i < N; i++)
if (test(i))
printf("%d\n", i);
return 0;
}
可能有人請解釋這段代碼給我?如果可能的話,請提供Java版本。其實,我只對Java感到舒服,所以我爲什麼問。這不是功課。
你好,投票者,我錯了什麼?我問的是錯誤的問題嗎?如果可能請解釋它 – 2012-01-28 06:51:30
請注意,Java有[按位運算符](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html),所以移植它應該是相當直接的(不是這有助於理解算法)。 – 2012-01-28 07:08:22
可能的重複[幫我理解這個「編程珍珠」bitsort程序](http://stackoverflow.com/questions/1050253/help-me-understand-this-programming-pearls-bitsort-program) – Borealid 2012-01-29 06:05:32