目录
2.<<左移 10>>1 使10的二进制序列向右移1位 低位自动补零
3.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同。
-
求一个整数中,二进制方式的1的个数
首先我们需要知道整数在内存中的方式,是以二进制序列表示的,其中整型占4个字节,以整数10为例,10的二进制数列为00000000000000000000000000001010,要求1的个数,最容易想到的方式是让这个二进制序列依次右移一位,并且需要用到位操作符&运算。
补充:
C语言的位运算符以及运算结果
1.& (与) 0 &0 为 0,0 &1 为 0, 1& 1 为1 (只有参与运算的两个位都为1时,结果才为1)
2. | (或) 0| 0 为 0, 0 |1为 1,1|1为1 (只要参与运算的一个位为1,结果都为1)
3.^(异或) 0^0 为0,0^1为1,1^1为0 (两个二进制位不同时,结果为 1,相同时结果为 0)
4.移位操作,>>右移,<<左移
1.>>右移 10>>1 使10的二进制序列向右移1位 ,高位自动补零
2.<<左移 10>>1 使10的二进制序列向右移1位 低位自动补零
方法一:使n这个数依次向右移动一位,并于1进行位运算,得到的结果与1比较,若结果为1,则记录。缺点:不够高效,每一个数都需要计算32次,较为复杂。
详细代码如下:
int Numberof_1(int n) { int count = 0; int i = 0; for (i