编程菜鸟一枚,有一个问题想请教

我在做一道OJ题目的时候吗, 同样的题目如果用这段代码段

if(cnt%5 == 0)
    printf("\n"); 
    else if(i == high)
      printf("\n");

要比用这段代码段

 if(cnt%5 == 0 || i == high )
    printf("\n"); 

要快,根据OJ上的数字,前者比后者快了一倍,当然整两个都是正确的,这是偶然吗?

在第二段代码中,首先会判断条件cnt%5==0是否成立,由于或机制的条件屏蔽,当其成立时第二个条件不执行,直接printf;
而cnt%5==0不成立时,还会进行判断第二个条件是否成立,当然还要执行或操作。

在第一段代码中两个条件判断是相同的,唯独没有或操作。

所以猜测第一段代码比第二段代码快,是由于没有或操作导致的。

这个要看你生成的汇编代码,以及你用的处理器的分支预测

原因 :
第一个代码段 如果刚好遇到了**cnt%5 == 0**时程序执行完毕
第二个代码段需要执行 cnt%5 == 0 和** i == high** 和一个** 逻辑或** 功能 所以前者比后者要快

应给是 cnt%5 == 0 条件成立,所以第一个没有执行else,而第二个依然要判断 i == high 条件是否成立,所以会多耗费一点时间

不是说|| 跟&& 差不多嘛,如果第一个条件成立是不会执行第二个条件 然后直接输出,如果第一个不成立才会运算第二个,恰好跟&&有点相反

快一倍肯定谈不上,第二种代码只有在cnt为特定值时才会慢一点,如果cnt是一个循环值,那速度应该只慢1/6左右

当然如果不是C或C++,那就要看断送逻辑了,如在VB下,这肯定是要慢一半的,因为VB对or运算只是要全部算完才判断