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 ...