このコードが何をするかについて混乱している
for (L=0; L < levels; L++, N_half>>=1){
func( y, N_half);
} // end: levels for loop
特に、この " N_half>>=1 "
ありがとう
反復ごとに N_half を 2 で割ることによってループを進めます。以下と同等です。
for (L=0; L<levels; ++L, N_half=N_half / 2) {
...
}
N_half>>=1
N_half に対して 1 桁のビットごとの右シフトを実行し、(負でない数の場合) 2 で除算します。
>>=
は>>
そのまま+=
です+
。
>>= 演算子は、数字の桁を 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 による除算と同じです。
N_half が正または符号なし整数の場合、それを半分にします。
N_half を 1 だけ右にシフトし (つまり、2 で割ります)、結果を N_half に格納します。
これと同じらしい
for (L=0; L < levels; L++)
{
func(y, N_Half);
N_Half /= 2;
}
私が答えたので、質問は言い換えられました。これはもはや有効ではありませんが、完全を期すために追加されました。ループ内で他に何も行われない場合、それは次と同等です。
N_Half >>= levels;
警告: