枚举集合的子集 for (int s = S; ; s = (s - 1) & S){ // do something if (!s) break; } 枚举大小为k的子集 int s = (1 << k) - 1; while (s < 1 << n){ // do something int x = s & -s, y = s + x; s = ((s & ~y) / x >> 1) | y; }