【今日头条面试题】一个表达式判断一个数是否是2的幂次方

目录

前言

1.右移->判断1的个数

2.位运算->判断1的个数

3.参考资料


前言

 今日头条实习生面试,手撕代码题目。

测试源码在这里。

 

1.右移->判断1的个数

考虑将该数化成二进制,2的幂次方的数用二进制表示的话,只有一位为1,其余为都为0.。题目则变成“如何判断一个二进制数只有一个位为1”。

代码如下:

boolean isPowerOfTwo(int num) {
    int count = 0;
    if (0 == num)
        return false;
    while (0 != num) {
        if (1 == (1 & num)) {
            count++;
        }
        num = num >> 1;
    }
    return count == 1;
}

2.位运算->判断1的个数

如何通过位运算,判断二进制数只有一个位为1呢?

位运算需要两个操作数,现在只有一个数,需要想办法利用已知的一个数生成第二个操作数;然后利用该两个数的位运算判断1的个数。

【今日头条面试题】一个表达式判断一个数是否是2的幂次方_第1张图片

假设已知的数为num,将原数减一得到第二个操作数num2=num-1;然后将num和num2按位于运算,如果结果为0,则表示num为一个2的幂次方数。

代码如下:

boolean isPowerOfTwo2(int num) {
    if(0 == num)
        return false;

    return 0 == (num & (num - 1));
}

3.参考资料

参考资料点这里。

你可能感兴趣的:(【编程基本】算法)