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

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的幂有什么特性呢?

4 0 = 1 4^0=1 40=1位运算46

2 2 = 4 1 = 4 2^2=4^1=4 22=41=4 位运算47

2 4 = 4 2 = 16 2^4=4^2=16 24=42=16 位运算48

2 6 = 4 3 = 64 2^6=4^3=64 26=43=64 位运算49

研究一下上面的图示不难发现,一个数如果是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的幂。

位运算50

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

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

位运算51

原因: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语言

位运算-代码实现C语言06

6.3.2 Java

位运算-代码实现Java06


7. 写在最后

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


8. 文档分享

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


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值