求一个整数存储在内存中的二进制中1的个数
includeint main() { int num = 0; int count = 0; scanf("%d",&num); int i = 0; for(i = 0;i < 32;i++) { if((num >> i) & 1) count++; } printf("count=%dn",count); return 0; }
对于语句:for(i=0;i<32;i++)
因为无论num取几,在32位操作系统中一定占32bit
对于语句(num>>i)&1
当一个整数按位与上1时,如果这个整数的二进制最低位为1,则num&1==1
如果这个二进制的最低位为0,则num&1==0
所以只需要将一个数每次向右移动1位,且与上1,判断是否满足count++的条件,直至向右移到31位为止,每次移动都判断条件
如果num==-1;则count==32;
因为在内存中-1的补码为32个1



