位运算总结

一、原码 & 反码 & 补码

   1. 正数的原码、反码、补码一致;

    2. 负数的反码 = 符号位不变,其他位取反;

    3. 负数的补码 = 负数的反码 + 1;

     4. 0 的反码、补码都是0;

二、位运算:

   1. a ^ 0 = a;

   2. a^ a = 0;   相同的数异或为零,通过异或可以得到两个数相同位上不同值则为1,同值则为0。

   3. n^ (n-1) = 0, 表示n是偶数;

   4.  a & (~b) = a-b;   一个数与另一个数的反相与,相当于这两个数相减

   5. a & b ; 用于判断b是否存在于a中;

 三、位运算符的运算律

  1. 交换律: A & B = B & A;  A^B = B^A

  2. 结合律:(A & B)& C = A & (B & C) 

  3. 等幂律:A & A = A; A & 0 = 0;

  4. 互补律:A & ~A = 0; A | ~A = -1;

  5. 同一律: A | 0 =A, A ^ 0 = A.

四、位运算的高级操作

1. 把右数的第k位变为1:x | 1<< (k-1);

2. 取右数的第k位: x >> (k-1) & 1;

3. 将 末k位全变为1 :  x | (1 << k-1);

例题:求c 满足 a&c=b&c,且让 c 尽可能地大 ( 0<a,b,c <=2^63). 

分析:尽可能的大,就是在c的每一位上尽可能地取1,所以a和b相同位上都取1即可; 

long long a,b,c,d; 

d = (a ^ b );
c =  pow (2, 63);
 c = c ^ d;

位运算交换两个整数:   

void swap(int &a,int &b){
      a ^= b;
      b ^= a;
      a ^= b;
  }

分析:

    a = a ^ b, 则:b = b ^ ( a ^ b) ==> b = b ^ b ^ a = 0  ^ a = a; 

同理:a = (a ^ b) ^ a = 0 ^ b =b. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值