1

このコードが何をするかについて混乱している

for (L=0; L < levels; L++, N_half>>=1){
    func( y, N_half);
} // end: levels for loop

特に、この " N_half>>=1 "

ありがとう

4

6 に答える 6

9

反復ごとに N_half を 2 で割ることによってループを進めます。以下と同等です。

for (L=0; L<levels; ++L, N_half=N_half / 2) {
    ...
}
于 2009-07-02T11:53:11.990 に答える
5

N_half>>=1N_half に対して 1 桁のビットごとの右シフトを実行し、(負でない数の場合) 2 で除算します。

>>=>>そのまま+=です+

于 2009-07-02T11:53:31.473 に答える
1

>>= 演算子は、数字の桁を k 桁右にシフトします

例:

バイナリ形式

N = 101010111 // 2-base  arithmetic system
N >>= 1; // `division` by 2
N: 010101011

小数形式

N = 123456 // 10-base  arithmetic system
N >>= 2; // `division` by 10^2
N: 001234

通常どおり、メモリ内の数値は 2 進数形式であり、>>=1 は 2 による除算と同じです。

于 2009-07-02T12:01:39.633 に答える
0

N_half が正または符号なし整数の場合、それを半分にします。

于 2009-07-02T11:53:39.180 に答える
0

N_half を 1 だけ右にシフトし (つまり、2 で割ります)、結果を N_half に格納します。

于 2009-07-02T11:56:29.597 に答える
0

これと同じらしい

for (L=0; L < levels; L++)
{
  func(y, N_Half); 
  N_Half /= 2;
}

私が答えたので、質問は言い換えられました。これはもはや有効ではありませんが、完全を期すために追加されました。ループ内で他に何も行われない場合、それは次と同等です。

N_Half >>= levels;

警告:

  • N_Half < 2^levels の場合 (数回の反復では 0)
  • N_Half < 0 の場合 (最初の右シフトは実装によっては正の数になります)
于 2009-07-02T11:59:46.407 に答える