位運算 2 3 4的冪

2022-04-06 09:32:47 字數 815 閱讀 7767

2的冪——即數字按位展開只有一位為1,所以 num&(num - 1) ==0;

return (n>0)&&((n&(n-1))==0)

4的冪——相較於2的冪而言對二進位制位要求更高,不僅要求數字按位展開只有一位為1,且1的後面必須有偶數個0,即…00000100,…00010000,…01000000。

法一:(num-1)後必然是三的倍數:

return  ((num & (num - 1)) == 0) && ((num - 1) % 3 == 0);

法二,既然已規定32位,那麼只有將所有的4的冪的位置上置1——即0x…101010101010101(0x55555555)與num相與為num本身即可;

return (num >0)&&((num & (num - 1)) == 0) && ((num & 0x55555555) == num);

法三:由冪的定義出發:利用換低公式 x = log4(num )(以4為底),x為整數即可。

return (num > 0) && (math.ceil(math.log10(num) / math.log10(4)) - math.log10(num) / math.log10(4) == 0);

3的冪——由冪的定義出發:利用換低公式x = log3(num )(以3為底),x為整數即可;或者math.pow(log3(num)) == num即可

return (n > 0) &&(math.pow(3,math.round((math.log(n)/math.log(3))))==n);

leetcode 快速冪運算(位運算)

題目描述 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。實現 def mypow self,x float,n int float if x 0 return 0 res 1 if n 0...

位運算和基於位運算的快速冪演算法

與運算 按位與 或運算 按位或 異或運算 按位異或 取反運算 按位取反 左移 右移 移位運算 介紹完二進位制中的基本位運算後,我們開始講解快速冪的演算法 快速冪是基於二進位制的運算的一種快速演算法 如 3 7 2187 7的二進位制為 0111 3 1 3 2 0 3 3 2 3 2 1 9 3 4...

位運算以及快速冪

1.原始碼,補碼,反碼 原始碼 原來的那個 反碼 正數的反碼是它本身,負數的反碼為 除了符號位之外,其他位取反。補碼 正數的補碼不變,負數的補碼 反碼 1 2.位運算 邏輯運算 and 只有兩個都為1,結果為1。xor 1xor1 0 0zor0 0 1xor0 1 0xor1 1 or 0or0 ...