编写此代码段的有效方法是什么?
是否可以更有效地和/或更快地重写此代码以节省字节并且看起来更简洁?
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
将可接受值的范围从6
– 20
为0
– 14
。 后一范围可以用四位表示。
第二个操作& 14
是按位且具有位模式1110
。 这将使0
到14
范围内的偶数保持不变,但它会将奇数转换为偶数,它将清除任何更高的位。 唯一不变的值是从第一步中的原始目标值派生的值。
第三个操作反转第一个操作,因此可以将结果与原始数字直接比较。 如果组合的操作序列再现原始编号,则该编号是您要查找的编号之一。
你为什么不这样做:
if (N % 2 == 0 && (N >= 6 && N <= 20)) { /* ... */ }
给定N是无符号整数。
if(N % 2 == 0 && (N-6) <= 14) { printf("Weird\n"); }