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

是否可以更有效地和/或更快地重写此代码以节省字节并且看起来更简洁?

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 - 6) & 14) + 6 == N) { printf("Weird\n"); } 

说明

第一个操作N - 6将可接受值的范围从620014 。 后一范围可以用四位表示。

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

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

你为什么不这样做:

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

给定N是无符号整数。

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