大家好,我在理解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