编写此代码段的有效方法是什么?

时间:2016-04-30 19:56:03

标签: c performance shortcut

如何更有效地和/或更快地重写此代码以节省字节并显得更简洁?

if(N % 2 == 0 && (N == 6 || N == 8 || N == 10 || N == 12 || N == 14 || N== 16 || N == 18 || N == 20 ))
{
    printf("Weird\n");
}

鉴于语言是C,如果它的java或php或任何其他语言无关紧要:-)。

3 个答案:

答案 0 :(得分:10)

为什么你不会这样做:

<div class="prtDiv">
   <div class="first">
     <div class="hello">Hello</div>
     <div class="goodbye">Goodbye</div>
  </div>
</div>

答案 1 :(得分:5)

给定N是无符号整数。

if(N % 2 == 0 && (N-6) <= 14)
{
    printf("Weird\n");
}

答案 2 :(得分:5)

假设N具有无符号整数类型,并且您对最小源代码比对清晰度更感兴趣,那么您可以编写

if (((N - 6) & 14) + 6 == N) {
    printf("Weird\n");
}

<强>解释

第一项操作N - 6将可接受值的范围从6 - 20转移到0 - 14。后一个范围可以用四位表示。

第二个操作& 14是位模式1110的按位。这将使0 - 14范围内的偶数保持不变,但它会将奇数转换为偶数,它将清除任何更高的位。唯一不变的值是从第一步中的原始目标值派生的值。

第三个操作反转第一个操作,因此可以将结果与原始数字直接比较。如果组合的操作序列再现原始编号,那么该编号就是您要查找的编号之一。