读书人

编程珠玑下的代码看不懂求解释

发布时间: 2012-09-23 10:28:11 作者: rapoo

编程珠玑上的代码看不懂,求解释

C# code
private const int bitsPerWord = 32;private const int shift = 5;private const int mask = 0x1F;private const int n = 10000000;private static readonly int[] a = new int[1 + n / bitSperWord];//a的长度?为什么是这个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));}

这段代码的功能是

[解决办法]
这个不就是位图的操作吗,当处理很大的数据量时,很有用。
如果数据总量为n,那就需要n / bitSperWord个int类型的空间,但是剩余的不足一个int类型的空间也要存储呀,所以a的长度为1 + n / bitSperWord。如果你还不明白,我就举个例子:你有n升水,每个碗的容量是bitSperWord升,要把所有的水都放到碗里,需要多少个碗?是不是1 + n / bitSperWord个碗?

读书人网 >C语言

热点推荐