整理了一网上,累死了,多谢教练的帮助。

位运算

1.利用或操作|和空格将英文字符转换成小写

('a'|' ')='a'
('A'|' ')='a'

2.利用与操作&和下划线将英文字符转化位大写

('b'&'_'='B')
('B'&'_'='B')

3.利用异或操作和空格进行英文字符大小写互换

('d'^' '='D')
('D'^' '='d')

4.判断两个整数是否异号

int x = -1,y = 2;
bool f=((x^b)<0);//true
int x = 3,y = 2;
bool f = ((x^y)<0);//false

5.快速交换两个数

a^=b;//a=a^b;
b^=a;//b=a^b^b->b=a;
a^=b;//a=a^b^a^b^b->a=b;

6.消除最后一个数字

void delete_last_1(int n){
    return n&(n-1);
}

7.lowbit()

int lowbit(int n){
    return n&(-n)
}

8.求第k位数字

return n>>k&1;

9.快速乘/除以2^n

return n<<k;
return n>>k;

10.计算q^n的累加和

t=tq+1;

11.取集

return a|b;//并集
return a&b;//交集
return `(a|b);ab都没有的

12.判断是不是2的整次幂

return n&!(n&(n-1))

13.判断一个数的奇偶性

return n&1;
位运算应用口诀
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或
移位运算

要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
         2 "<<" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
        3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
         4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。

位运算符的应用 (源操作数s 掩码mask)
(1) 按位与-- &
    1 清零特定位 (mask中特定位置0,其它位为1,s=s&mask)
     2 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)
(2) 按位或-- |
        常用来将源操作数某些位置1,其它位不变。 (mask中特定位置1,其它位为0 s=s|mask)
(3) 位异或-- ^
     1 使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)
     2 不引入第三变量,交换两个变量的值 (设 a=a1,b=b1)
    目标           操作              操作后状态
a=a1^b1         a=a^b              a=a1^b1,b=b1
b=a1^b1^b1      b=a^b              a=a1^b1,b=a1
a=b1^a1^a1      a=a^b              a=b1,b=a1

二进制补码运算公式:
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x|y)+(x&y)
x-y = x + ~y + 1 = (x|~y)-(~x&y)
x^y = (x|y)-(x&y)
x|y = (x&~y)+y
x&y = (~x|y)-~x
x==y:    ~(x-y|y-x)
x!=y:    x-y|y-x
x< y:    (x-y)^((x^y)&((x-y)^x))
x<=y:    (x|~y)&((x^y)|~(y-x))
x< y:    (~x&y)|((~x|y)&(x-y))//无符号x,y比较
x<=y:    (~x|y)&((x^y)|~(y-x))//无符号x,y比较

应用举例
(1) 判断int型变量a是奇数还是偶数           
       a&1   = 0 偶数
       a&1 =   1 奇数
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
(3) 将int型变量a的第k位清0,即a=a&~(1<<k)
(4) 将int型变量a的第k位置1,即a=a|(1<<k)
(5) int型变量循环左移k次,即a=a<<k|a>>16-k   (设sizeof(int)=16)
(6) int型变量a循环右移k次,即a=a>>k|a<<16-k   (设sizeof(int)=16)
(7)整数的平均值
位运算表

原码补码反码

正数反不变全部,负数反不变符号

正数补不变全部,负数补反码加一