判斷值是否是2的冪

2021-04-22 14:51:10 字數 710 閱讀 7671

判斷乙個是值是否是2的冪在3d遊戲中常用函式

以往的判斷方法是迴圈判斷位或者直接一直迴圈除2.

這些方法的效率可想而知.

這裡我用了一種直接位操作進行,效率看**就知道.先看**:

bool is2power(int n)

解釋一下(以n=512為例):

1.尺寸1不是2的冪

2.對 n 取反(~n)結果是  0xfffffdff , 說明512的最高位為0,其它位為1

3.n-1 結果是  0x000001ff , 說明512的最高位及最高位更高的位都為0,其它位為1

4.所有2的冪的值都是最高位為1其它位為0

結果我們發現 n-1 的結果就是我們想到得到該值有效位值

這樣我們計算 ((~n)&(n-1))  後得到了乙個沒有最高位的值,也就是(n-1)=512-1=511

因此我們再將511+1就得到了乙個與該值相等的新值.

而且該新值就等於原值

再測試一下n=500

~n結果是 0xfffffe0b, 最高位為0,其它位不一定為1

n-1結果是 0x000001f3, 最高位及最高位更高的位都為0, 其它位不一定為1

((~n)&(n-1)) 得到的結果就不是我們想到的499,而是乙個按位與出來的結果.

所以不等於原值.

至此,經過測試該函式達到了我們想到的判斷該值是否是2的冪效果.

怎麼樣,去試試吧.

leetcode 判斷是否為2的冪

判斷給定數是否為2的冪。1.判斷該數是否能被2整除,若不能整除,直接返回false,若能整除,再判斷最後除2的商是否等於1,若等於1,則返回true,否則返回false。2.若乙個數是2的冪數,則它的二進位制表示只存在乙個1,且該1位於二進位制的最右邊。使用 運算,運算 x x 則只保留x二進位制的...

python判斷數字是否是超級素數冪

如果乙個數字能表示成 p q,且p是乙個素數,q為大於1的正整數,則此數字就是超級素數冪。param number 測試該數字是否是超級素數冪 return 如果不是就返回 false,如果是就返回 p 和 q 值 例如,輸入125,返回 5,3 impo math def get prime nu...

python 判斷乙個數是否是2的冪次方

乙個數是否是2的冪次方,比較常用的是遞迴和移位運算進行判斷。1.遞迴演算法的思想很簡單,就是不斷的模上2去判斷。2.如果乙個數是2的冪,那麼它的二進位制表示中就只有一位1,例如 10000,1000,100等等。所以如果對數字1進行移位操作,總會在移到某個位的時候和這個數相等。這就是移位判斷的思想。...