我在打印数组的最终值时遇到困难,以便提高进程的速度。所有变量都是全局的。 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]);)
}
}
}
答案 0 :(得分:0)
在您的代码中,在调用functiona(k);
时,您按价值传递k
。 functiona()
对参数所做的任何更改都不会反映到k
。
^
是XOR
运营商。不要把它误认为是指数。
另外,我想知道,如果你看一下operator precedence表,你会理解k<=2^20-1
或k == 2^20-1
以某种完全不同的方式执行的方式你可能会想。
这里你需要的是pow()
函数,正如其他人已经建议的那样。
也就是说,看起来for
的另一个printf()
循环可能对您有所帮助。
答案 1 :(得分:0)
当您打算使用指数时,您在if和for条件中使用xor运算符。
使用math.h&#39; pow
函数代替:
if ((pow(2, 20) - 1) == k)
由于这是2的幂,你也可以使用位移
if (((2 << 19) - 1) == k)
正如有人在评论中指出的那样,你也可以这样写:
if (((1 << 20) - 1) == k)
请记住 - 不要忘记改变你的for循环条件!
答案 2 :(得分:0)
这个想法是你在循环时附加你想要的值,然后在循环结束时打印变量中的任何值。
我让循环从最大值变为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。