Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

我的解法极其垃圾,建议不要看。

public class Solution {
public boolean isPowerOfFour(int num) {
if(num == 0 || (num != 1 && num % 4 != 0))
return false;
else if(num == 1 || num == 4)
return true;
else
return isPowerOfFour(num/4);
}
}

解释一下高手的解法。

public boolean isPowerOfFour(int num) {
return num > 0 && (num&(num-1)) == 0 && (num & 0x55555555) != 0;
//0x55555555 is to get rid of those power of 2 but not power of 4
//so that the single 1 bit always appears at the odd position
}

要满足一个数是四的n阶指数如16,64这种,上面给出的解法意思就是要满足三个条件。

1、大于零

2、比它小1的数相与为0,简单的说,这个数的二进制表示的时候只能有一个1,其他的均为0

3、这个唯一的1必须正确的位置上面,

0x55555555 十六进制数,是01010101010101010101010101010101
和这个数相与如果结果不为那么1就在01010101010101010101010101010101的1的位置上面,只有一个1且还在这些位置上面的数都是满足条件的。

leetcode342合理运用位操作判断4的幂的更多相关文章

  1. C语言位操作--判断整数是否为2的幂

    unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂 // 改变表示方 ...

  2. C语言位操作--判断两整数是否异号

    判断两整数是否异号: int x, y; //输入比较的两数 bool f = ((x ^ y) < 0); // 返回真,当且仅当x与y异号 说明:当x.y异号,x与y的最高位分别为0和1,取 ...

  3. C语言位操作--判断整数的符号

    关于衡量计算操作的方法: 当为算法统计操作的数量的时候,所有的C运算符被认为是一样的操作.中间过程不被写入随机存储器(RAM)而不被计算,当然,这种操作数的计算方法,只是作为那些接近机器指令和CPU运 ...

  4. POJ3641 Pseudoprime numbers(快速幂+素数判断)

    POJ3641 Pseudoprime numbers p是Pseudoprime numbers的条件: p是合数,(p^a)%p=a;所以首先要进行素数判断,再快速幂. 此题是大白P122 Car ...

  5. JS中的位操作在实际项目中的应用

    前言: Linux中的文件管理子系统的权限管理,想必大家都知道:rwx分别代表read(可读),write(可写), execute(可执行,如果是可执行程序的话),其中rxw可以按照数字表示: r  ...

  6. lintcode-142-O(1)时间检测2的幂次

    142-O(1)时间检测2的幂次 用 O(1) 时间检测整数 n 是否是 2 的幂次. 样例 n=4,返回 true; n=5,返回 false. 挑战 O(1) time 标签 比特位操作 思路 使 ...

  7. python简介与基本操作

    一.python的历史 python的创始人Guido van Rossum,现就职于Dropbox公司. 1989年12月份诞生了python1.0 2000年10月16日发布了python2.0 ...

  8. 【转】 cJSON 源码解析

    关于cjson的介绍和使用方法就不在这里介绍了,详情请查看上一篇博客cjson使用方法. JSON的内存结构像广义表,可以认为是有层次的双向链表. cJSON程序中的细节点如下: 大量宏替换 大量静态 ...

  9. 【转】cJSON 源码分析

    cJSON源码分析 简介 由于C语言汇总,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json. JSON是一种轻量级的数据交换格式.JSON采用完全独立与语言的文本格式,易于人阅 ...

随机推荐

  1. 如何占用你用户的时间 and 如何提高客户的满意度 。 待续

    未来的商业竞争, 可能本质上是在争取客户的时间 嗯..有不定时, 未知的奖励,游戏行业就经常使用, 比如打怪掉装备, 不一定掉什么好东西, 让人充满了期待, 玛雅宝石, 有一定的概率... 觉得公司员 ...

  2. mongodb 性能提高之利用索引, 待续

    > 10 , 用户无法忍受 >1s , 需要加装中提示 数据库对软件整体影响是不言而喻的, 那么使用 MOngoDB时 该如何提高数据库性能 第一: 索引, 相当于记忆法的 地点桩 1. ...

  3. php+mysql 内联接 和 子查询

    INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录 $sql="SELECT * FROM subject as a INNER JOIN e_user as b ON a. ...

  4. EventBus消息机制在Eclipse环境下的使用

    1.在onStart()方法中注册 @Override public void onStart() { super.onStart(); // 注册 EventBus // 判断 Eventbus 是 ...

  5. (一)html之基本结构

    一:HTML基本结构 1.1 HTML文档结构 1.1.1 外层结构 <!DOCTYPE HTML> <html> </html> DOCTYPE元素用于告诉浏览器 ...

  6. github使用方法(一)

    github是目前流行的代码托管网站. github.com是一个网站,它为你提供一个远程版本库(你和你的协作者的工作成果最终提交在这里):同时它也是一个共享平台,你可以在这里找到数不尽的源码. 关于 ...

  7. ORACEL12c求和SUM(a+b)与SUM(a)+SUM(b)结果不一致问题

    今天在oracle12c数据库遇到的问题,下面重现一下: 1.先创建一个临时表 temp.一个数据表bitest_sum; -- Create table create table PEC.BITES ...

  8. android 简单粗暴的注解初始化View学习

    原理是在Activity加载好后通过找到Activity中使用注解的字段,再通过Java反射的方式,动态的给这个字段设置值. 1定义一个注解接口 /** * view inect by id * * ...

  9. Linux下安装awstats日志统计分析

    1. 下载安装 cd /data/software wget http://prdownloads.sourceforge.net/awstats/awstats-7.0-1.noarch.rpm 2 ...

  10. 手机浏览器无法获取COOKIE的原因

    手机浏览器上无法使用cookie,肯能是 1. 浏览器禁用 COOKIE ,这个简单开启即可. 2. 可能是手机所在时区有问题,将COOKIE有效期设置更长时间测试下,在更改时区