巩鹏军的博客

HOME

小算法 - 2的次幂

29 Jul 2022

1、向上取整到2的次幂

Redis在字典扩容时会选择向上取整到2的次幂:

/* This is the initial size of every hash table */
#define DICT_HT_INITIAL_SIZE     4

/* Our hash table capability is a power of two */
unsigned long _dictNextPower(unsigned long size) {
    unsigned long i = DICT_HT_INITIAL_SIZE;

    if (size >= LONG_MAX) return LONG_MAX;
    while(1) {
        if (i >= size)
            return i;
        i *= 2;
    }
}

2、判断是不是2的次幂

思路:2的次幂的二进制只有最高位是1,其余为0,减1后最高位向后借位为0,其余为1

// 返回值 1表示n是2的次幂,0表示不是
int isPowerOfTwo(int n) {
    //注意按位与的优先级小于等于号 需要加括号
    if(n>0 && (n&n-1)==0) {  
        return 1;
    }
    return 0;
}

3、参考信息

参考信息:源码链接更多解法判断整数次幂问题

关于我

专注于IM即时通讯全技术栈的程序员,关注获取更多IM技术文章。

gongpengjunblog

IM小蓝天

微信扫描二维码,关注我的公众号