算法题目
1. 求二进制数中1的个数 (题目与解法均来自《编程之美》第二章) 题目:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。 解法1:举一个8位二进制的例子来分析,对于二进制操作,我们知道,除以一个2,原来的数字就会少个0,如果除的过程中有余,那么就表示当前位置有一个“1”。 以10 100 010 为例: 第一次除以2时,商为1 010 001 ,余为0; 第二次除以2时,商为101 000,余为1.因此可以利用整形数据除法的特点,通过相除和判断余数的值来进行分析,代码如下: int Count(int v) { int num=0; while(v) { if(v%2==1){ num++;//判断是否有余1,并记录 } v=v/2; } return num; } 解法2:除操作比较复杂,可以通过向右唯一的操作达到目的,唯一的不同在于,位移之后如何判断是否有“1”的存在。例如:10 100 001 ,在向右移位的过程中,我们会把最后一位直接丢掉,因此,判断最后一位是否为“1”,可以通过“与”操作达到目的。将这个8位数与000 000 01 进行“与”操作,如果结果为“1”,则表明这个8位数的最后一位是1,否则为0,代码如下: int Count(int v) { int num=0; while(v) {