leetcode 位运算总结
1、Rabin-karp算法
用于将字符串映射为相应的掩码,字符串不相同时,掩码不同。例如,对于一个字符串S,其掩码可如下计算:
其中,代表的是S的定义域大小,比如说如果S全是英文字母,那么的值为26,因为英文字母就只有26个。然后这个函数是一个映射函数,映射S的定义域中的每一个字符到数字的函数。
2、Brian kernighan算法
对于一个正数 x , x & (x -1)可以将 x 的二进制的最右端的“1”转化为“0”,由此可以引申出一个结论 x > x & (x -1)。
leetcode 201 数字范围按位与.
3、异或的运用
C++中 ^
表示异或。x ^ y
可以得到x y
的二进制中不相同的位。
leetcode 137 只出现一次的数字 II.
4、判断数字的二进制某位是否为“1”
int x = 234;
int bit = 4;
if (x & (1 << bit))
{
"x的第bit位为1"
}