位运算
位运算
0&0=0 0&1=0 1&0=0 1&1=1
& 与 两个位都为1时,结果才为1
| 或 两个位都为0时,结果才为0
-
^ 异或 两个位相同为0,相异为1
- 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
判断一个数是否是2的整数次幂
# 是否是2的整数次幂
def is_power_of(num):
return (num & num - 1) == 0
print(is_power_of(16))
与运算:提取出一个数最右边的1
int rightOne = eor &(-eor +1 );
eor: 1010111100
eor取反: 0101000011
取反+1:0101000100 取反加一为补码
eor 与 eor取反+1:0000000100
补充:
(n−1) 解析: 二进制数字 nn 最右边的 11 变成 00 ,此 11 右边的 00 都变成 11 。
n&(n−1) 解析: 二进制数字 nn 最右边的 11 变成 00 ,其余不变(消去二进制数最右边的1)
与运算:清零
这个数与一个各位都是零的数相与,结果为零
因为:& 与 两个位都为1时,结果才为1
与运算:判断奇偶
(a&1) == 0 ,a是偶数
(a&1) !=0,a是奇数
原来是:根据最未位是0还是1来决定,为0就是偶数,为1就是奇数
异或运算符:交换俩个数字
def