Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中n个位的2^n个状态上循环n>;32_C_Loops_While Loop - Fatal编程技术网

在C中n个位的2^n个状态上循环n>;32

在C中n个位的2^n个状态上循环n>;32,c,loops,while-loop,C,Loops,While Loop,我想在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;i32)这种方法显然不适用于long 如果n>32,我将如何工作 具体地说,我真的需要计算2^n吗,或者是否有一种巧妙的方法来编写循环,它不引用

我想在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;i32)这种方法显然不适用于long

如果n>32,我将如何工作


具体地说,我真的需要计算2^n吗,或者是否有一种巧妙的方法来编写循环,它不引用2^n的实际值,而是迭代2^n次?

对于n>32,请使用
无符号长时间
。这将适用于n到64次。对于接近50次的值,仍然需要等待长时间直到循环结束。

不清楚为什么你说如果n>32,它显然不起作用。你关心的是位的宽度,还是运行时间

如果您关心数字宽度,请调查一个大型数学库,例如


如果你担心运行时间…如果宽度足够大,你的循环就无法完成,所以要有不同的爱好;)说真的。。。计算出循环中一次迭代的大致运行时间,然后将其乘以40亿,再除以20年,就可以估计出需要等待答案的祖先的代数;它可以使用
uint64\u t
声明32位整数。当你迭代完它的所有值后,再来问第二个问题。所有整数都有它们的位。要获取您使用的任何整数的位
n
i&(1如果我是uint64\u t类型,这是否有效?如果n>32,我的方法不起作用,因为我使用整数(或长)算术。如果n>32,则从2^n(整数或长算术)得到的结果将是垃圾。@Daniel只需使用我的answer@Daniel,这就是我建议使用大型数学库的原因。使用大型数学库,您将不会使用任何标量类型,这样您就不会被锁定为64位的最大宽度。无论如何,您将没有足够的时间使用现代CPU迭代32位。但是sizeof(unsigned long-long)与sizeof(long)相同,那么这有什么帮助呢?unsigned long-long在我见过的所有编译器上都是64位的,另一方面,long可能是32位或64位,具体取决于编译器和体系结构。还请记住,您必须以稍微不同的方式获取位。例如
unsigned long a=1;a&(1谢谢,最后一部分还不清楚。如何获取无符号长变量y的x位?@Daniel您需要对无符号长数字执行位运算。所以使用
(a&(1)但50可以吗?它不需要是50ULL?
for(i=0;i<x;i++) {
    bits = convert_integer_to_bits( i );
    work_on_bits( bits );
}