位运算和基于位运算的快速幂算法

位运算和快速幂(和)的应用

  1. & 与运算(按位与)
  • 在二进制中只有同一位置均为1时结果位才为1,否则为0!
  • 如:9 & 5
  • 00001001 (9的二进制)
  • 00000101 (5的二进制)
  • ————————————
  • 00000001 (1的二进制)
  • 所以 9 & 5 = 1
  1. | 或运算 (按位或)
  • 在二进制中同一位有一个位为1,或同时为1时(只要不同时为0)结果位为1,否则为0!
  • 如:9 | 5
  • 00001001 (9的二进制)
  • 00000101 (5的二进制)
  • ————————————
  • 00001101 (13的二进制)
  • 所以 9 | 5 = 1
  1. ^ 异或运算 (按位异或)
  • 在二进制中同一位同时不相同时,结果位为1,否则为0!
  • 如:9 ^ 5
  • 00001001 (9的二进制)
  • 00000101 (5的二进制)
  • ————————————
  • 00001100 (12的二进制)
  • 所以 9 ^ 5 = 12
  1. ~ 取反运算(按位取反)
  • 在二进制中,结果位取该位置的反位(1取0,0取1)
  • 如 9
  • 000……01001 (32位)
  • ————————————
  • 111……10110 (32位)
  1. <<(左移)、>>(右移)移位运算
  • 在二进制运算中,左移一位相当于*2运算,右移移位相当于/2运算。
  • 左移
  • 如 1(二进制0001)
  • 1 << 1 (0010) = 2
  • 1 << 2 (0100) =4
  • 1 << 3 (1000) =8
  • 右移
  • 如 8(二进制1000)
  • 8 >> 1 (0100) =4
  • 8 >> 2 (0010) =2
  • 8 >> 3 (0001) =1

介绍完二进制中的基本位运算后,我们开始讲解快速幂的算法:

快速幂是基于二进制的运算的一种快速算法
如 3^7= 2187
7的二进制为(0111)
3^1 =3 ^(2 ^ 0) = 3
3^2 =3 ^(2 ^ 1) = 9
3^4 =3 ^(2 ^ 2) = 81
3 ^13 ^23 ^4=2187
因为任意数都可以由2的次方组合出,因此得出当次方数的二进制在该位为1时,就乘上底数的(2在当前位置的次方)次方

long long  pow(int Base,int M){
   long long ans=1;//所求的答案
    while(M){
        if(M&1)ans=ans*Base;
        Base*=Base;
        M>>=1;
    }
    return ans;
}`

M为次方数
当Base为M当前二进制位置n底数的2^n的次方数
该算法的复杂度为log(n)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值