题目要求 给出一个int 看是否是2的幂 即 2^? 能否 == int值
自己解法:
利用取模mod 的底层表示 n & (2-1) + 逐次/2 , 取mod值 != 0 时可以返回 false
别人解法:
1. 值一定是 正值
2.2次幂的底层表示其实是 100...00 即 1 后面都是0
那么就可以用 n & (n-1) 来判断 —— 和mod的底层思想十分类似
例如 1000 & 0111 那么结果 一定是0
但是 1001 & 1000 那么结果一定不为0
因此 只要 确保 大于0 并且 n & (n - 1) = 0即可