1、二进制中1的个数
用到了n & (n - 1)
(1)方法一:参考文章:整数的二进制表示中1的个数
(2) 输入两个数A和B,输出将A转换为B所需改变的二进制的位数。
方法:首先,A异或B得到的是A和B中不相同位数组成的数,然后再求这个数二进制表示中1的个数,即为所求。
2、数组中只出现一次的数字
用到了n & (n - 1)
数组中仅出现一次的一个数字、仅出现一次的两个数字
参考文章:http://zhedahht.blog.163.com/blog/static/2541117420071128950682/
数组中仅出现一次的三个数字
参考文章:http://zhedahht.blog.163.com/blog/static/25411174201283084246412/
3、不用加减乘除做加法
参考文章:http://zhedahht.blog.163.com/blog/static/254111742011125100605/
4、位操作实现加减乘除运算
5、不借助变量交换两个数
参考文章:不借助变量交换两个数
6、比较两个数大小
7、二进制位的翻转
8、二进制表示的高低位交换
http://blog.csdn.net/morewindows/article/details/7354571
9、位操作与空间压缩
http://blog.csdn.net/morewindows/article/details/7354571#t6
10、bitmap对海量数据排序
11、求两个数中较小的那个
y ^ ((x ^ y) & -(x < y))
分析:当x < y时,-(x < y)为-1,其补码形式全为1,则(x ^ y) & -(x < y) = x ^ y,则上述表达式返回的是较小的数x;
当x >= y时,-(x < y)为0,补码形式为全0,则(x ^ y) & -(x < y) = 0, 则表达式返回的是较小的数y。