私は数字Xを持っていますが、2の累乗数を確認したいのですか?私はnext power of 2
2の累乗数を確認する
For Ex:
N=14 Ans=16
をチェックする例
N=7 ans is 2 , 2*2
N=20 ans is 4, 2*2*2*2
同様
については は、任意のビットがfor
ループを使用せず、このためにハックありますか? 同様に、それが2の威力であるかどうかをチェックする1行の解決策を持っているようです。
私は数字Xを持っていますが、2の累乗数を確認したいのですか?私はnext power of 2
2の累乗数を確認する
For Ex:
N=14 Ans=16
をチェックする例
N=7 ans is 2 , 2*2
N=20 ans is 4, 2*2*2*2
同様
については は、任意のビットがfor
ループを使用せず、このためにハックありますか? 同様に、それが2の威力であるかどうかをチェックする1行の解決策を持っているようです。
GCCには、先行ゼロの数を整数で返す__builtin_clz()
という組み込み命令があります。たとえば、32ビットのint
を仮定すると、式p = 32 - __builtin_clz(n)
は、整数n
を格納するために必要なビット数を示し、1 << p
は2の次の最大累乗を与えます(p
<、もちろん32)。
long
とlong long
の整数で機能する同等の機能もあります。
また、math.h
は、倍精度数の底2指数を返すfrexp()
という関数を定義しています。この関数に渡す前に整数を倍精度値に変換する必要があるため、これは効率が悪い可能性があります。
数値は2進数で '1'が1つしかない場合、2の累乗です。たとえば、2 = 00000010,4 = 00000100,8 = 00001000などとなります。だからあなたはそれを数えてチェックすることができます。そのビット値には1の値が入ります。 countが1の場合、数値は2の累乗であり、その逆もあります。
設定ビットをカウントするためのループを避けるには、hereとhereの助けを借りてください。
countが1ではない(Valueが2の累乗でないことを意味する)場合、MSBからの最初のセットビットの位置をとり、2の次の累乗はこの数値にセットされたビット+位置1の値ですたとえば、番号3 = 00000011です。MSBからの最初のセットビットは2番目のビットです。したがって、2進数の次の累乗は、3番目の位置にビットをセットした値です。すなわち00000100 = 4.
http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer –
@AlexeyGuseynov i guessセットビットの数は私に正しい答えを与えません – user6250837
この '10000000001'のようにsetbitは2だけです – user6250837