我想在 C 中对 n 位的所有可能的 2^n 状态进行循环。例如,如果 n=4,我想循环遍历 0000、0001、0010、0011、...、1110、1111。这些位可以用任何方式表示,例如长度为 n 且值为 0 的整数数组或1,或者长度为 n 的字符数组,其值为“0”或“1”等,这并不重要。
对于较小的 n,我所做的是使用整数算术计算 x=2^n(n 和 x 都是整数),然后
for(i=0;i<x;i++) {
bits = convert_integer_to_bits( i );
work_on_bits( bits );
}
这里 'bits' 在给定的位表示中,到目前为止有用的是一个长度为 n 的整数数组,其值为 0 或 1(但可以是其他任何值)。
如果 n>32 这种方法显然不适用于多头。
我将如何处理 n>32?
具体来说,我真的需要评估 2^n,还是有一种棘手的方法来编写不引用 2^n 的实际值但仍然迭代 2^n 次的循环?