A2、减计数循环要比增计数循环更好。

来源:互联网 发布:java 线程池初始化 编辑:程序博客网 时间:2024/05/18 00:18

循环的终止条件应为减计数到零(count dawn to zero),而不是计数增加到某个特定的限制值。由于减计数结果已存储在条件标志里,与零比较的指令就可以省略了。由于不再使用‘作为数组的下标索引,采用减计数就没有任何问题。

int checksum(int * data)
{
    unsigned int i;
    int sum = 0;
    for( i = 64; i != 0;i --)
  {
    sum += *(data ++);
  }
    return sum;
}

 对无符号的循环计数值i来说,循环继续的条件既可以是i != 0也可以是i>0 由于i不可能是负数,所以这两个条件是等价的。而对一个有符号的循环计数值来说,用条件i>0来作为继续循环的条件是一件冒险的事情。使用减计数到零的循环结构,这样编译器就不需要分配一个寄存器来保存循环终止值,而且与0比较的指令也可以省略。

   总而言之,无论对于有符号还是无符号的循环计数值,都应使用i != 0作为循环的结束条件。对有符号数i,这比使用条件i>0少了一条指令。