根据另一个数组中设置的值打印一个数组的元素

时间:2015-06-25 14:09:01

标签: c arrays optimization

我有两个数组,一个是data [n]数组,类型为int并存储随机值。另一个是result [n / 4]数组,它在一个元素中有关于'data'数组的4个整数的详细信息。

例如:result [0] = 1000 0000 1000 0000 0000 0000 1000 0000意味着需要打印数据[0],数据[1],数据[3]。 simillarly结果[1]在数据[4]中包含数据[4]的详细信息,因此如果数据数组中存在“n”个元素,则结果数组中将存在n / 4个元素。

现在我提供了结果和数据数组以及计数值(结果数组中元素的数量),我必须打印那些设置了'result'值的'data'值(即'1000 0000 “)。我尝试了两种方法。

方法1:

i=0;j=0;
while(i<count) 
{
if((result[i]>>24 & 0xff) > 0) printf("%d",data[j]);
if((result[i]>>16 & 0xff) > 0) printf("%d",data[j+1]);
if((result[i]>>8 & 0xff) > 0) printf("%d",data[j+2]);
if((result[i]>>0 & 0xff) > 0) printf("%d",data[j+3]);
i++;
j+=4;
}

方法2:

while(i<count){
    if((res[i] & 0x80000000)==0x80000000)  printf("%d\n",dat[x]); 
    if((res[i] & 0x00800000)==0x00800000)  printf("%d\n",dat[x+1]); 
    if((res[i] & 0x00008000)==0x80008000)  printf("%d\n",dat[x+2]); 
    if((res[i] & 0x80000080)==0x80000080)  printf("%d\n",dat[x+3]); 
    i++;
    x+=4;
}

我对第一种方法的性能不满意所以从我的代码中消除了移位操作符并转到第二种方法。速度有了相当大的提高,但这种提高的速度对我的应用来说还不够。 建议任何其他技术以比上述两种方法更快的方式解决我的问题。

1 个答案:

答案 0 :(得分:0)

你的瓶颈是printf()函数调用 - 首先构建一个新的字符串,然后在执行检查后打印它 - 每4字节检查一次printf()调用是一种改进。您可以通过仅在结果的末尾或每个完整行(控制台窗口)进行打印来减少printf()调用。

希望这有帮助,谢谢 - 尼尔