位運算判斷2的n次冪:
舉個栗子,n = 8;則二進制表示就為1000,n-1則為 0111 取&剛好等於0
嘿嘿,巧妙吧。
再舉個栗子,n = 7; 則二進制為 0111,n-1則為0110 取&則不為0
嘿嘿,也沒問題,不過這個算法僅限於無符號數。
bool is_power_of_2(unsigned long n) { return (n != 0 && ((n & (n - 1)) == 0)); }
順便說一下如何判斷2的倍數,其實很明顯,把奇數轉成二進制后,最后一位一定是1,所以只需要判斷一下 n & 1就行了
學習不易,諸君共勉!