我想在所有可能的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