一、位运算
1、&按位与同为1才为1 (用于添加0)
2、| 按位或同为0才为0。(用于添加1)
3、异或不同为1, 相同为0。
4、进行位运算时,系统会自动将数字转化为二进制的形式,再逐位计算。
5、x << k 表示将x转化为二进制后,向左移动k位,并在末尾补个0得到的值。
等同于x * 2 ^ k; x >> k 等同于 x // 2 ^ k
6、位运算只可以对非负整数操作
7、例子:x >> 1 去掉最后一位 == 除以2
x << 1 在最后加个0 == 乘 2
(x << 1) | 1 在最后添加1
x | (1 << (k - 1)) 将右数第k位变成0
x & ~(1 << (k - 1)) 将右数第k位变为1
x >> k & 1 获取第k位的值
计算二进制有几个1:
int x , c = 0;
for( ; x; c ++){x = x & (x - 1)}