挑战面试编程:计算整数二进制位中1的个数
题目:
在计算机中,整数是以2的补码的形式给出的。 给出整数A和B,假设计算机是32位机,求从A到B之间的所有二进制数中,一共用了多少个1。 输入格式: 多组数据,每组数据一行,由两个整数A,B, -2147483648<=A<=B<=2147483647 输出格式: 每组输出一行,从A到B使用的1的个数。(本题取自csdn高校俱乐部线上编程挑战赛)
分析:
我们知道任何数据在计算机中都是用二进制表示的,即用一堆0或1表示各种类型的数据。当然还要考虑它的字节数,例如在32位机中。sizeof(int)=4,sizeof(float)=4,sizeof(double)=8,sizeof(long long)=8。当然一种数据类型配了多少字节来存储,这不仅与cpu的字长、系统有关,还与编译器有关。上面的数据是我的机器上测试值。既然要统计二进位中1的个数,当然优先考虑位运算。
下面介绍几种位运算(位运算即按位运算):
位与 &
运算规则:0&0=0;
位或 |
运算规则:0|0=0;