0

したがって、次のような for ループがあります。

for(span=N>>1;span;span>>=1)

開始条件と終了条件は次のように等しいと想定しています。

span = N>>1; //right shift N by 1 and initialize to span
while(span!=0)
{
 span = span >> 1;
}

ただし、私のコードのコンテキストでは少し奇妙に思えます。前もって感謝します!

4

3 に答える 3

4

すべての反復で、0に達するまで変数スパンを2で除算します。

したがって、最初にN = 8の場合、スパンの値は4、2、1、0->終了ループになります。

于 2012-10-05T06:09:26.103 に答える
0

それは正しいです。

  • イニシャライザはspan = N >> 1、Nを1だけ右シフトするように設定します。
  • ループ条件はspan、であり、これは。と同等span != 0です。
  • ループが発生するたびに、span再び1ずつ右シフトされます。

正の整数のコンテキストでは、これはと同等for(span=N/2;span>0;span/=2)です。しかし、あなたの特定の文脈を知らなければ、これが奇妙であるかどうかについてコメントすることはできません。

于 2012-10-05T06:10:43.137 に答える
0

短くて甘い...はい、コードを示している限り、あなたの解釈はしっかりと正しいものです。

于 2012-10-05T06:17:03.463 に答える