このコードをより効率的かつ/または短時間で書き換えて、バイトを節約し、あまり冗長ではないようにする方法?このコードスニペットを効率的に書く方法は?
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などの言語であれば問題ありません.-)。
このコードをより効率的かつ/または短時間で書き換えて、バイトを節約し、あまり冗長ではないようにする方法?このコードスニペットを効率的に書く方法は?
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
にシフトします。後者の範囲は4ビットで表すことができます。
第2の操作& 14
は、ビットパターン1110
を持つビット単位でとです。これにより、偶数は0
- 14
の範囲で変わりませんが、奇数を偶数に変換し、上位ビットをクリアします。変更されずに生存する唯一の値は、最初のステップで元の目標値から導き出された値です。
第3の操作は最初の操作を逆にして、結果を元の番号と直接比較できるようにします。組み合わされた一連の操作で元の番号が再現された場合、その番号は探していた番号の1つです。
私のためにタイの背後にある論理を説明できるなら、本当に感謝します。私はいくつかのビット賢明な操作を参照してください、右か? –
@ YousufEjazi007、done。 –
あなたは神様です!私は感謝の仲間です! –
与えられたNは符号なし整数です。
if(N % 2 == 0 && (N-6) <= 14)
{
printf("Weird\n");
}
!(N%2) - 非常に悪いスタイル。ブール論理と算術との混合 – SomeWittyUsername
はい、もちろんです。それは実際のロジックを隠しますが、バイトをソースコードに保存します。 –
効率性はソースコードの保存ではありません。 (N%2)== 0は正確に同じバイナリを返します。 – SomeWittyUsername
N%2 == 0 && N> 5 && N <21'なぜでしょうか? – skypjack