打印 for 循环迭代的最终值

Printing the final value of the iteration of a for loop

我在打印数组的最终值以提高处理速度时遇到困难。所有变量都是全局的。 c 是一个 20 位数组。在 for 循环中,functiona(k) 被调用,其中某些公式应用于 k 的值。

目标:当 k = 2^20-1 时,我只想打印代码中显示的 C 数组的值。我试过使用 if 语句,但这不起作用。我有什么办法可以解决这个问题吗?

int main(void)
{
    for(k=0;k<=2^20-1;k++)
    {
        functiona(k);
        //printf("\n");
        if(k == 2^20-1)
        {
            printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
            c[19], c[18],c[17],c[16],c[15],c[14],c[13],
            c[12],c[11],c[10],c[9],c[8],c[7],c[6],
            c[5],c[4],c[3],c[2],c[1],c[0]);)
        }
    }

}

在您的代码中,当调用 functiona(k); 时,您正在按值传递 kfunctiona() 对参数所做的任何更改都不会反映到 k

顺便说一句,值得一提的是,^XOR 运算符。不要把它误认为是指数。

此外,我想知道,如果你看一下 operator precedence table,你就会明白,k<=2^20-1k == 2^20-1 完全被执行的方式和你想的不一样。

也许您在这里需要的是 pow() 功能,正如其他人已经建议的那样。

也就是说,printf() 的另一个 for 循环可能对您很有帮助。

当您打算使用指数时,您在 if 和 for 条件中使用了 xor 运算符。

改用math.h的pow函数:

if ((pow(2, 20) - 1) == k)

因为这是2的幂,你也可以使用位移

if (((2 << 19) - 1) == k)

正如评论中有人指出的那样,您也可以将上面的内容写成这样:

if (((1 << 20) - 1) == k)

记住——别忘了也更改 for 循环的条件!

想法是在循环时附加所需的值,然后在循环结束时打印变量中的任何内容。

我让循环从最大值变为 0,但你也可以这样做

str = functiona(k) + str + " ";

如果你愿意,我只是觉得如果你总是追加到最后会更容易阅读。

int main(void)
{
    for(k<=2^20-1;k=0;k--)
    {

        strcat (str, strcat(functiona(k), " "));
    }
    printf(str)
}

编辑:哎呀,我读这个 Java 哈哈。编辑strconcat。