在C中n个比特的2 ^ n个状态循环,其中n> 1。 32

时间:2013-03-05 12:11:09

标签: c loops while-loop

我希望在所有可能的n ^ n个n ^ n状态中有一个C循环。例如,如果n = 4,我想循环遍历0000,0001,0010,1211,...,1110,1111。这些位可以以任何方式表示,例如长度为n且值为0的整数数组或1,或者长度为n的字符数组,其值为“0”或“1”等,这并不重要。

对于小n,我所做的是使用整数运算(n和x都是整数)计算x = 2 ^ n,然后

for(i=0;i<x;i++) {
    bits = convert_integer_to_bits( i );
    work_on_bits( bits );
}

这里'bits'在给定的位表示中,到目前为止有用的是一个长度为n的整数数组,其值为0或1(但可以是其他任何东西)。

如果n> 32,这种方法即使用long也显然不起作用。

我如何使用n&gt; 32?

具体来说,我是否真的需要评估2 ^ n,还是有一种棘手的写循环方式,它没有引用2 ^ n的实际值,但却迭代了2 ^ n次?

2 个答案:

答案 0 :(得分:1)

对于n&gt; 32使用unsigned long long。这将适用于高达64的n。对于甚至接近50的值,您还必须等待时间,直到循环结束。

答案 1 :(得分:0)

目前尚不清楚为什么你说如果n> 32,它显然将不起作用。您关注的是位宽,还是关注运行时间?

如果您担心数字宽度,请调查一个大数学库,例如http://gmplib.org/

如果你担心运行时间...如果宽度足够大,你的循环就不会足够长,所以得到一个不同的爱好;)认真地...弄清楚粗略的运行时间通过循环进行一次迭代并将其乘以40亿,除以20年,并且您将估计需要等待答案的祖先世代数。