【面试题】i&(i-1)判断n是否为2的次幂

一、参考资料

i&i-1的作用
i&(i-1)
有趣的逻辑运算符“&”,在Python中的用法详解

二、相关介绍

1. 按位与(&)

& 运算符用于整数时,会执行按位与操作。按位与操作的规则是将两个整数对应的二进制位进行与运算,得到的结果再转换为十进制。例如:

a = 5  # 二进制表示是 101
b = 3  # 二进制表示是 011
result = a & b  # 二进制表示是 001
print(result)  # 输出结果为 1

2. i&(i-1)

2.1 母题:判断n是否为2的次幂?

// c语言
// 判断n是否为2的次幂,且n为正整数
bool isPowerOfTwo(int n) {
   
    return n>0&&(n&(n-1))==0;
}
# python
"""
查找满足2的次幂的数
https://github.com/lorenzopapa5/SPEED/blob/main/layers.py#L135-L138
"""
def HPO2(filters_value):
    for i in range(filters_value, 0, -1):
        if (i & (i - 1)) == 0:
            return i

2.2 拓展

#include <stdio.h>

int fun(int i) 
{
    
    int cnt = 0; 
    while(i) 
    {
    
        cnt++; 
        i = i&(i-1); 
    } 
    
    return cnt; 
} 

int main()
{
    
    printf( "%d\n", fun(2017) );
    
    return 0;  
}

思考:上面这个函数的作用是什么?

答案: 我们首先来看一下 i&(i-1), i&(i-1)的作用是将i的二进制表示的最低位为1的改为0。在本题中即数出2017转换成二进制有几个1就会走几次循环。2017对应的二进制是:10000111111,一共7个1,故走7次。

相关推荐

  1. 面试】i&(i-1)判断n是否2

    2024-01-17 01:34:05       58 阅读
  2. leetcode231 判断一个给定整数是否2n

    2024-01-17 01:34:05       36 阅读
  3. freemarker if 判断list 中元素是否null

    2024-01-17 01:34:05       21 阅读
  4. js判断是否数字方法

    2024-01-17 01:34:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 01:34:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 01:34:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 01:34:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 01:34:05       20 阅读

热门阅读

  1. leetcode-2182.构造限制重复的字符串

    2024-01-17 01:34:05       40 阅读
  2. 开发工程师常用的ChatGPT通用提示词模板

    2024-01-17 01:34:05       42 阅读
  3. Qt/QML编程之路:设计模式(31)

    2024-01-17 01:34:05       32 阅读