我想在所有可能的2^n状态的n位中有一个循环。例如,如果n = 4,我想循环遍历0000,0001,0010,0011,...,1110,1111.这些位可以用任何方式表示,例如长度为n的整数数组,其值为0或1,或长度为n的字符数组,值为“0”或“1”等,这并不重要。在C中n位的2^n个状态循环,n> 32
对于短小Ñ我做的是计算X = 2^n的使用整数运算(包括n和x是整数),则
for(i=0;i<x;i++) {
bits = convert_integer_to_bits(i);
work_on_bits(bits);
}
这里“位”是在比特的给定表示,什么迄今为止,它是一个长度为n的整数数组,其值为0或1(但也可以是其他值)。
如果n> 32,这种方法即使长时间显然也不起作用。
我该如何处理n> 32?
具体而言,我是否真的需要评估2^n,或者是否有一个很不方便的写循环的方法,它并不是指2^n的实际值,而是迭代2^n次?
#include int32_t my_32bit_int;它可以声明一个32位整数 –
2013-03-05 12:13:30
使用'uint64_t'。当您完成对所有值的迭代后,回来再发布第二个问题。 – 2013-03-05 12:13:39
_所有整数都有它们的位。要获得_any_整数的'n',你可以使用'i&(1 << n)'。您不需要“将整数转换为位”。 – 2013-03-05 12:14:33