基本算法-位运算

l
~
异或xor

 同1为1

 有1为1

 异1同0

 

在m位二进制中,通常称最低位为第0位,从右到左类推,最高位为第m-1位

 

补码

对于32位无符号整数来说,直接把这个编码看做无符号二进制数;对于32位有符号整数来说,最高位是符号位,0表示非负数,1表示负数。对于非负数,直接看做32位二进制数S

 

初始化为无穷大,选用memset(a,0x3f,sizeof(a)),因为它的两倍不超过int的最大值,且可以用memset赋值(每8位都相同)

移位运算

左移:数字向左移动,低位以0填充,高位越位后舍弃。1<<n=2^n  n<<1=2n

右移:n>>1=[ n/2.0 ]向下取整

快速幂

long long ksm(long  long a,long long  b){
    long long ans=1;
    while(b){
        if(b&1==1)     ans*=a; //是因为3/2=1,有一个a^1要处理
        a*=a;
        b/=2;
    }
    return ans;
}
View Code

 

二进制状态压缩 

将一个长度为m的bool数组用一个m位二进制整数表示并存储的方法。

eg.整数n

操作运算
取出n的第k位(n>>k)&1
取出n的第0~k-1位n&( (1<<k)-1 )
把n的第k位取反n xor (1<<k)
把n的第k位赋值1n l (1<<k)
把n的第k位赋值0n&(~(1<<k) )

转载于:https://www.cnblogs.com/SUMMER20020929/p/10496918.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值