位运算的常见操作和题目

1、二进制中1的个数

用到了n & (n - 1)

(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、比较两个数大小

参考文章:不借助if、switch等语句求两个数较大的一个

7、二进制位的翻转

字符串合并处理(二进制位的倒序)

二进制位的翻转

8、二进制表示的高低位交换

http://blog.csdn.net/morewindows/article/details/7354571

9、位操作与空间压缩

http://blog.csdn.net/morewindows/article/details/7354571#t6

10、bitmap对海量数据排序

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。

文章导航