位运算题目

Posted fanguangdexiaoyuer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算题目相关的知识,希望对你有一定的参考价值。

m的n次方

如果让你求解 m 的 n 次方,并且不能使用系统自带的 pow 函数,你会怎么做呢?这还不简单,连续让 n 个 m 相乘就行了,代码如下:

int pow(int n)
    int tmp = 1;
    for(int i = 1; i <= n; i++) 
        tmp = tmp * m;
    
    return tmp;

如果让你用位运算来做,你会怎么做呢?

我举个例子吧,例如 n = 13,则 n 的二进制表示为 1101, 那么 m 的 13 次方可以拆解为:

m^1101 = m^0001 * m^0100 * m^1000。

我们可以通过 & 1和 >>1 来逐位读取 1101,为1时将该位代表的乘数累乘到最终结果。直接看代码吧,反而容易理解:

int pow(int n)
        int sum = 1;
        int tmp = m;
        while(n != 0)
            if((n & 1) == 1)
                sum *= tmp;
            
            tmp *= tmp;
            n = n >> 1;
        

        return sum;
    

 

以上是关于位运算题目的主要内容,如果未能解决你的问题,请参考以下文章

位运算模板

位运算模板

位运算计算位掩码再枚举——318. 最大单词长度乘积

位运算规律——格雷编码

三道C语言位运算题目,求大神!

使用位运算对两个数求和-Python代码