一致するかどうかは確認番号の基本的な基準は、ここでsize/4
のままであることである。これは、モジュロ演算子、%
使用して検出することができます。2.次のとおりです。
size % 4 == 2
を次に、どのように質問があります上記の例2.によってunit
を分割する多数回:size == 2
について
- 、
unit /= 8
(すべての3つの条件に合致します)。
size == 6
の場合、unit /= 4
(第2の2つの条件と一致する)。
size == 10
の場合、unit /= 2
(最後の条件に一致)。
Soは少ない数、チェック最大size
が10である場合、それは8で割って複数回、unit
は2^(1 + (10 - size)/4)
によって分割されます。
unit >>= 1 + (10 - size)/4
または、より一般的には:
unit >>= 1 + (max_number - size)/4
max_number % 4 == 2
これは右シフト演算子を用いて簡潔に表現することができます。
設定max_number = 254
(質問に256が指定されていますが、最後の数字は254となります)、2 <= size <= 254
の場合はこれを適用することに注意してください。述べたように
if ((size & 0xffffff03) == 2)
:
if (size % 4 == 2 && size >= 2 && size <= 254) {
unit >>= 1 + (254 - size)/4;
}
実際に、条件式(しかし間違いなくより少ない読み出し可能)のような、より簡潔に表すことができます。 @PaulBoddingtonによって、右シフトのサイズを考慮する必要があります。ユニットがint
で、シフトされたビット数が31より大きい場合、unit
は単にゼロに設定する必要があります。
私はあなたにこのことを賞賛します。 –
これは将来の誰かに役立つように説明的なタイトルまたは説明を付けることができますか? 「基本的なアルゴリズム」を探している人はいません。 –
@Mykeどのような提案? –