c - 循环 C 中 n 位的 2^n 状态,其中 n > 32

标签 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;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 次?

最佳答案

对于 n > 32,请使用unsigned long long。这适用于 n 最多 64。对于接近 50 的值,您将不得不等待很长时间,直到循环结束。

关于c - 循环 C 中 n 位的 2^n 状态,其中 n > 32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15223465/

相关文章:

c - 这个值是如何计算的?

java - 为什么这个图形循环会卡住我的图形用户界面?

function - 带有子函数调用的奇怪 'while' 循环行为(MATLAB)

将日期从字符数组转换为 ISO8601

c - 如何使用带 pthreads 的线程池?

Python 搜索列

c++ 每 5 分钟调用一次函数

java - 我的 while 循环不会因中断而停止?

c pthreads : run at most 4 threads concurrently at any time

java - 我在为包含整数 1-25 的数组创建循环并每行打印 5 个数字时遇到问题