按位与(&)运算的作用

按位与(&)其功能是参与运算的两数各对应的二进制位相与。只有对应的两个二进制位均为1时,结果位才为1,否则为0 。参与运算的数以补码方式出现。

1、请实现一个函数,输入一个正数,输出该数二进制表示中1的个数。

  

  这里用到了这样一个知识点:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0 。 那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

  总结:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0 。

2、输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。

  解决方法:第一步,求这两个数的异或;第二步,统计异或结果中1的位数。

  

3、用一条语句判断一个整数是不是2的整数次方。

  解决方法:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其它所有位都是0 。 根据前面的分析,把这个整数减去1后再和它自己做与运算,这个整数中唯一的1就变成0了。

  解答:!(x & (x - 1)

原文地址:https://www.cnblogs.com/Hellorxh/p/13496652.html