编写此代码片段的有效方法?

An efficient way to write this code snippet?

如何更有效地重写此代码and/or 以节省字节并显得不那么冗长?

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 或任何其他语言并不重要 :-)。

给定 N 是无符号整数。

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

你为什么不这样做:

if (N % 2 == 0 && (N >= 6 && N <= 20))
{
     /* ... */
}

假设 N 有一个无符号整数类型,而你更感兴趣的是最小源代码而不是清晰度,那么你可能会写

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

解释:

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

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

第三次运算与第一次相反,这样就可以直接和原来的数进行比较了。如果组合的操作序列重现了原始数字,那么该数字就是您要查找的数字之一。