2015-02-09 50 views
1

我无法打印数组的最终值以提高进程的速度。所有变量都是全局的。 c是一个20位数组。在for循环中,函数a(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]);) 
     } 
    } 

} 
+3

'2^20'会给你一个xored'20'和'2'。在C中,'^'是一个XOR运算符 – 2015-02-09 21:09:39

+1

使用'math.h'' pow(基数,指数)'函数 – 2015-02-09 21:10:19

+2

@Isaiah有一个更好的方法来计算C中2的幂数(位移)。 – 2015-02-09 21:11:59

回答

0

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

使用math.h中的pow函数:

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

因为这是两种力量,你也可以使用比特移位

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

正如有人指出的评论,你也可以请将上面写为:

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

Remem不要忘记改变你的循环条件!

+1

或者更习惯地说,“1 << 20”。 – 2015-02-09 21:15:57

+0

你还得减去1,对吧? – 2015-02-09 21:16:33

+1

是的,'1 << 20'代替'2 << 19'。 – 2015-02-09 21:17:19

0

是代码,一边拨打functiona(k);,你是按值传递kfunctiona()对参数所做的任何更改都不会反映到k

顺便说一下,值得一提的是,^XOR运营商。不要误以为指数。

另外,我想知道,如果你看看operator precedence表,你会明白,方式k<=2^20-1k == 2^20-1得到执行的方式完全不同于你的想法。

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

这就是说,它看起来像另一个for循环printf()可能会帮助你非常。

+0

k是一个全局变量,这意味着通过引用sematics总是 – 2015-02-09 21:40:52

+0

如果是这样的话,为什么要作为参数传递? – 2015-02-09 21:51:13

+0

他是一个初学者......实际上,他不应该传递一个论点 - 如果他使用了Wextra,那么应该触发一个警告来掩盖变量 – 2015-02-09 21:53:38

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。

+1

这很好,你注意到print语句可以在循环后执行一次,但是'str + =“stuff”'在C中不起作用(我认为OP只是想打印计算出的'c'数组值在'函数'中,但这是一个猜测。) – 2015-02-09 21:19:27

+1

那么,'str =“”'仍然不正确。 'functiona(k)+“”'中的'+'也不是。最好跳过字符串的东西,我不认为这是需要的。 ('functiona(k)'填充golbal'c'数组,应在循环后打印。) – 2015-02-09 21:28:20