这些#defines有什么意义?

我正在通过问题MAXCOUNT的最佳解决方案,发现几行我不明白。

提交 Codechef问题和最佳解决方案

当我阅读代码来观察方法时,我在代码顶部遇到了这些行:

#define isSet(n) flags[n>>5]&(1<>5] &= ~(1<>5]|=(1<<(n&31)) 

我不知道使用这些线的意义何在。
任何人都可以解释这些线,为什么使用它们?

看起来它指的是存储为整数的位数组。 n >> 5表示将它除以32,并且int中有32位,因此索引数组。 然后右边使用余数(31的位模式是0b11111意味着和它的操作将过滤掉所有剩余的位,只留下五个最不重要的位 – 这恰好匹配除以后的余数32)找到它感兴趣的特定位(1 << n在位置n中产生一位掩码,而&运算符过滤掉除此之外的所有内容)。

Unset使用〜,它反转掩码 – 清除该位,其余部分保持不变。 set使用按位或运算符,它设置一个位。

因此它们只是用于处理整数数组中各个位的便捷宏。