判斷乙個是值是否是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進行移位操作,總會在移到某個位的時候和這個數相等。這就是移位判斷的思想。...