1.求n的二进制字符中有多少个1
code:for(int i = 0; n != 0; n = n & (n - 1))i++;
假设n转换为二进制后的长度为m,1的个数为i
转换为二进制后判断每个字符是否是1,这样需要循环m次,判断,计算i
该方法只需要循环i次,原理就是依次把n的二进制字符中的i通过 ‘与’算法变为0
2.对于m乘以或者除以2的n次方的运算直接用左移或者右移实现
code:m*16 => n<<4
乘法或者除法的指令周期要比位移运算的指令周期长很多,这个是由计算机结构决定的。3.判断n是否是偶数
code:if((n % 2) == 0) => if((n & 1) == 0)
乘法或者除法的指令周期要比位移运算的指令周期长很多,这个是由计算机结构决定的。
待续。。。