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

标签 c arrays optimization

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

例如:result[0]=1000 0000 1000 0000 0000 0000 1000 0000 表示需要打印出data[0], data[1], data[3]。类似地,结果[1]的每个字节中都有有关数据[4]到数据[7]的详细信息,因此如果数据数组中存在“n”个元素,则结果数组中存在n/4个元素。

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

方法一:

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;
}

我对第一种方法的性能不满意,因此从我的代码中删除了移位运算符并转到第二种方法。速度有了相当大的提高,但是这种提高的速度对于我的应用程序来说还不够。 建议任何其他技术来比上述两种方法更快地解决我的问题。

最佳答案

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

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

关于c - 根据另一个数组中设置的值打印一个数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052783/

相关文章:

C - 二叉树 : error while appending a new child to the tree

将 pthreaded 程序转换为 MPI?

java - 邻接矩阵的图形实现和初始化

c++ - Hello World CUDA 编译问题

c - 尝试分配不兼容的类型时出错

c void 指针数组打印

java - 求 200 万以内的素数之和

java - 我可以改变我的字符串吗?

python - 将一个数拆分为两个幂的和

javascript - 在 Koa 发送响应后运行代码