for (int mask = 1; mask < ((1 << nSize) - 1); ++mask)
{
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
for (int ix = 0; ix < nSize; ++ix)
{
if (((1 << ix) & mask) != 0)
l1.Add(this.items[ix]);
else
l2.Add(this.items[ix]);
}
DataItem item1 = new DataItem(l1);
subSet1.Add(item1);
DataItem item2 = new DataItem(l2);
subSet2.Add(item2);
}
这段代码实现的是生成集合的所有真子集,关键不是很明白的地方是if (((1 << ix) & mask) != 0),能懂其意思 但是不知道他为什么这样做。