Part Three 习题巧解 之 5. 2的幂
Part Three 习题巧解 之 1. 判断奇偶数
Part Three 习题巧解 之 2. 两数交换
Part Three 习题巧解 之 3. 只出现一次的数字
Part Three 习题巧解 之 4. 位1的个数
5. 2的幂
5.1 题目描述
5.2 思路讲解
思路讲解之前,请先思考一下除了一般做法的其他思路,尽量往位运算方面靠。
5.2.1 2的幂的特性
2的幂有什么特性呢?
研究一下上面的图示不难发现,2的幂有且仅有一个位为1
所以问题转换为判断Part Three 习题巧解 之 4. 位1的个数为1的情况。
注意:需要特判一下n<=0的情况,n<=0都不是2的幂
5.2.2 位运算
思路:判断n&(n-1)是否为0,若不为0则不是2的幂,若为0则是2的幂。
原因:如果n只有一位位为1的数,那么1后面的低位都是0,根据位为1的解题思路可得n&(n-1)必为0
5.2.3 总结
思路:此题需要掌握Part Three 习题巧解 之 4. 位1的个数的解题思路以及2的幂的特征方可解决此题
位运算符的技巧:n&(n-1)消灭了最右边的位为1的数
5.3 代码实现
5.3.1 C语言
5.3.2 Java
6. 写在最后
系列解题文章已经第五篇了,你是否觉得n&(n-1)运算有许多巧妙之处。希望看完这篇文档的你,能动手验证一下。纸上得来终觉浅,绝知此事要躬行。
7. 文档分享
如果您觉得这份关于2的幂的文档还不错,尝试点击分享这份文档给好友吧!
作者 @MythicalCreature
于2020 年 08月 20日发布