N・(N-1)のビット単位の巧妙な使用

今日、ブラシleecodaが見つかっN&(N-1)この使用方法を、私はとても不思議な感じ、それを記録

1、int型の数が2のべき乗かどうかを見つけます

n = 4の場合、バイナリである:0100

   N-1 = 3、バイナリである:0011

则:N・(N-1)== 0

図から分かるように、2のすべての権限は、高い進数は1でありされ、そしてこれだけは、4,0100として、高い; 8,1000。N-1、それは残りの1がN次いで、4-1,0011,8-1,0111ように、低くなると(N-1)、ゼロとなるハイレベルになると0になり

即ち、N・(N-1)== 0

2バイナリ、1にどのように多くのビット数

一方、(N> 0){

++数えます。

N = N・(N-1)。

}

N = N・(N-1)、これにより、それぞれが1を消費します。

3かどうかは、電源の数3

3、1162261467(19番目3)までのモジュロnは32で除去1162261467有する:Benbanfa単語と

パブリック クラスソリューション{
     パブリックブールisPowerOfThree(INT N){
         戻り N> 0 &&(1162261467%のN == 0 )。
    } 
}

 

4かどうかは、電源の数4

数が4のパワーである、2つの力がなければならない、逆に、真ではありません

したがって、最初の条件を決定するN・(N-1)== 0は、決定された数を見つけるために必要な条件である2のべき乗であること

ただ、など、数は、例えば、必ずしも2,8,32 4のパワー2の累乗されていないと言うこれらは2つのシリーズの力があります

しかし、我々はそのような数字の1を減算^ 0 ^ 1 = 2 = 4、2 ^ 4 = 16、2と2の偶数乗を、見つけることができる、2の奇数パワーながら、3で割り切れることができマイナス数が1から3で割り切れることができません

4この場合、我々は簡単な条件を見つけることができる必要十分な力、即ちN> 0 &&((N・(N-1))== 0)&&((N-1)%3 == 0)

おすすめ

転載: www.cnblogs.com/roscangjie/p/10964408.html