首先判斷是否為 2 的冪, 因為 4 的冪均是 2 的冪
2 的冪 num ==1, 2, 4, 8, 16, 32 …
換成 2 進製即:1, 10, 100, 1000, 10000, 100000, …
明顯可以得出 ( num & (num) ) == 0;
4 的冪 num == 1, 4, 16, 64, …
換成二進位制即:1, 100, 10000, 1000000, …
明顯可以得出 4 的冪二進位制中的 「1」都在奇數字置上,而判斷二進位制數中的 「1」 是否在奇數字置上就用 num&0x55555555;
因為 5 ==0x0101;
八個 5 是因為整型數字數是 32 位;
拓展:判斷二進位制數中的 「1」 是否在偶數字置上就用 num&0xaaaaaaaa;
因為 a == 0x1010;
#include
#include
#define true 1
#define false 0
intfunction
(int num )
intmain
(void
)return0;
}
判斷乙個數是否為2的次方冪
給定乙個整數n,判斷它是否為2的次方冪。思路 2,4,8,16,32.都是2的n次冪 轉換為二進位制分別為 10 100 1000 10000 100000 這些數減1後與自身進行按位與,如果結果為0,表示這個數是2的n次冪 01 011 0111 01111 011111 10 01 0 100 ...
如何判斷乙個數是否為2的冪
給定乙個整數,寫乙個函式判斷該函式是否為2的冪。例如輸入 16 輸出 true 輸入 5 輸出 false bool ispoweroftwo int n bool ispoweroftwo int n 由二進位制原理可以知道,如果乙個數為2的冪,那麼這個數對應的二進位制應該只有乙個1,演算法1 在...
判斷乙個數是否為回文數
問題描述 輸入乙個數值判斷是否為回文數 回文數是指乙個像12321 123321這樣 對稱 的數 解題思路 將數值的各個位存放在陣列中,若陣列中元素左右對稱,則為回文數,反之不是 設定 left 陣列最左邊下標 right 陣列最右邊下標 首先判斷第乙個和最後乙個數值是否相等,若相等,left ri...