C语言 避免 IF ELSE 分支



我正在研究分支,我想避免在循环中分支,这基本上就是这样做的

for(z=0; z<8; z++){
   if(0xff&&(array[z])!=0 ){
       break;
   }
 }

所以我的计划实际上是用以下内容替换它:

for(z=0; z<8; z++){
     (0xff&&(array[z])==0 ) ? continue :  break;
}

但是,好吧,这不起作用,我理解为什么,但想知道是否有另一种方法可以以类似的方式做到这一点。

谢谢

您可以将中断条件包含在 for 语句的终止条件(即 z<8)中。 但是你不能避免分支;这只是一种不同的表达方式。

使用 ? 仍然是一个分支,它只是另一种写if的方式。由于您只有 8 个指示,因此您可以展开循环。

inline int getZ() { if (array[0] & 0xff) return 0; if (array[1] & 0xff) return 1; ... and so on }

作为旁注,您希望使用 & 位运算符,而不是布尔&&运算符,否则您的表达式将始终为 true。

怎么样:

int bits = 0;
for(z=0; z<8; z++) bits |= array[z];
if ((bits & 0xff) != 0) printf("Found it!n");

上面只有一个额外的 if,而不是每个循环迭代一个。 如果您的目标是使代码的执行速度更快,则可能会有所帮助,也可能不会。 (我的猜测是,如果您在现代CPU上运行,它不会有太大区别)

int z = 0;
while(z<8 && (0xff&&array[z]==0)) z++;

注意:也许你的意思是用0xff屏蔽数组[z]?(即使用按位和运算符?)

你对表达式的否定是错误的。

0xff true(这总是正确的)并且(array[z])!=0 true时,0xff&&(array[z])!=0 true

因此,0xff&&(array[z])!=0评估为否定给出(array[z])!=0 (array[z]==0)

所以你需要修改(0xff&&(array[z])==0 ) ? continue : break;(array[z]==0) ? continue : break;

相关内容

  • 没有找到相关文章

最新更新