一、^
按位异或运算符“^”是双目运算符。当两对应的二进位相异时,结果为1。
2(10) 1(01) => 2^1=3(11);
3(11) 1(01) => 3^1=2(10);
Number^1:
(0,1),(2,3),(4,5),(6,7),(8,9)……(n-1,n);
当知道每组的其中一个数,可求另一个数。
二、~
步骤:~B:B二进制 =>取反 => 减1 => 再取反 => 转化为 10 进制的负数
计算~60:
60的8位二进制数是 0011 1100
先取反即 1100 0011
减1即 1100 0010
再取反即 0011 1101
转化为10进制即 61
再取负数即 -61;
所以 ~60 = -61
计算~0
8位二进制数是 0000 0000
取反 1111 1111
逆操作 -1 => 1111 1110
取反 => 0000 0001
即 1
又因此处 是取反 负数 即 ~0 = -1
三、-
步骤:-k:按位取反,然后末尾加1;
k=12,计算-k:
12的二进制为=>1100
按位取反=>0011
末尾加1=>0100
转换=>4
应用:lowbit(k)为整数k的二进制表示中右边第一个 1 所代表的数。
lowbit(k)= k & (-k);
例如:计算lowbit(10);
10的二进制=>1010
按位取反=>0101
末尾加1=>0110
(1010)&(0110)=>(0010)
转换为十进制=>2
所以整数 10 的二进制表示中右边第一个 1 所代表的数为 2.
inline int lowbit(int x)
{
return x&(-x);
}