質問: 32 ビット整数の1
すべてのセット ビット ( ) を右にシフトするアルゴリズムを開発する方法
例
V= 0b01001000110010
にV
は 5 つのセット ビットが含まれており、それらを右にシフトすると、次のようになります。
V = 0b011111
私が試したこと:
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
上記のコードは、設定されたビット数を 32 ビット整数で返します。
そして次のコードで
c = (1<<c) - 1;
c
最初のビットを に設定します1
。説明
上記のソリューションよりも優れたアルゴリズムは他にありますか?
提案されたソリューションでビット演算 ( &
、|
、^
、~
、 ) のみを使用することは可能ですか?>>
<<