【发布时间】:2014-12-21 18:42:01
【问题描述】:
我正在研究问题 MAXCOUNT 的最佳解决方案,发现有几行我不明白。
Codechef Problem 和 Best Solution submitted
在阅读代码以观察方法时,我在代码顶部遇到了以下几行:
#define isSet(n) flags[n>>5]&(1<<(n&31))
#define unset(n) flags[n>>5] &= ~(1<<(n&31))
#define set(n) flags[n>>5]|=(1<<(n&31))
我不知道使用这些行有什么意义。
谁能解释一下这些行以及为什么要使用它们?
【问题讨论】:
-
搜索“C 宏”
-
顺便说一句:这些不是很好的宏。至少
(1<<(n&31))应确保无符号算术,例如:(1u<<(n&31))。此外,常数 31 是基于n范围的假设。