Part Three 习题巧解 之 1. 判断奇偶数
Part Three 习题巧解 之 2. 两数交换
Part Three 习题巧解 之 3. 只出现一次的数字
Part Three 习题巧解 之 4. 位1的个数
Part Three 习题巧解 之 5. 2的幂

6. 4的幂

6.1 题目描述

leetcode-342. 4的幂

6.2 思路讲解

思路讲解之前,请先思考一下除了一般做法的其他思路,尽量往位运算方面靠。

6.2.1 4的幂的特性

4的幂有什么特性呢?

40=14^0=1Part Three 习题巧解 之 6. 4的幂

22=41=42^2=4^1=4 Part Three 习题巧解 之 6. 4的幂

24=42=162^4=4^2=16 Part Three 习题巧解 之 6. 4的幂

26=43=642^6=4^3=64 Part Three 习题巧解 之 6. 4的幂

研究一下上面的图示不难发现,一个数如果是4的幂,那么一定是2的幂,并且位为1的是偶数位(从0开始算)

所以问题转换为位1的个数为1并且位为1的是偶数位的情况。

注意:需要特判一下n<=0的情况,n<=0都不是4的幂

6.2.2 位运算

思路:先判断是否为2的幂,再判断位为1是否为偶数位

问题转换:从上一篇Part Three 习题巧解 之 5. 2的幂已经知道怎么求解2的幂,只需要在2的幂上判断位为1是否为偶数位,是则为4的幂,不是则不为4的幂

问题继续转换:判断位为1是否为偶数位,可以与0x55555555按位与,判断是否与原数相等,是则为4的幂,不是则不为4的幂。

Part Three 习题巧解 之 6. 4的幂

原因:n&0x55555555是对偶数位进行保留,因为偶数位都是1,1&1=1、1&0=0都是对原有数位进行保留。而奇数位都是0,0&1=0、0&0=0都是对原有数位归为0。

问题也可转换:判断位为1是否为偶数位,可以与0xaaaaaaaa按位与,判断是否等于0,是则为4的幂,不是则不为4的幂。

Part Three 习题巧解 之 6. 4的幂

原因:n&0xaaaaaaaa是对奇数位进行保留,因为奇数位都是1,1&1=1、1&0=0都是对原有数位进行保留。而偶数位都是0,0&1=0、0&0=0都是对原有数位归为0。

6.2.3 总结

思路:此题需要掌握2的幂的解题思路以及4的幂的特征方可解决此题

位运算符的技巧:

n&(n-1)消灭了最右边的位为1的数

n&0xaaaaaaaa是对奇数位进行保留

n&0x55555555是对偶数位进行保留

6.3 代码实现

6.3.1 C语言

Part Three 习题巧解 之 6. 4的幂

6.3.2 Java

Part Three 习题巧解 之 6. 4的幂


7. 写在最后

系列解题文章已经是最后一篇了,你是否觉得位运算有许多巧妙之处。希望看完这篇文档的你,能动手验证一下。纸上得来终觉浅,绝知此事要躬行。


8. 文档分享

如果您觉得这份关于4的幂的文档还不错,尝试点击分享这份文档给好友吧!


作者 @MythicalCreature
于2020 年 08月 20日发布

相关文章:

  • 2021-11-03
  • 2022-12-23
  • 2021-08-24
  • 2021-06-23
  • 2021-07-12
  • 2021-04-29
  • 2021-08-05
  • 2021-07-20
猜你喜欢
  • 2021-09-04
  • 2022-01-03
  • 2021-11-15
  • 2021-05-22
  • 2021-05-05
  • 2021-10-26
  • 2022-12-23
相关资源
相似解决方案