int A; //A为16位数
char B; //B为一个字节,是8位数
char i, n = 0;
for (i = 0; i < 16; i++) { //循环16次,要根据位数来确定循环次数.
n += (A % 2); //末位是1,n加一 .
A = A / 2; //右移一位.
}
循环结束时,n为A中1的个数,16 - n即为0的个数
假设要判断的数据是x的二进制有几个1
原理:x&(x-1)是吧x最有边的1变为0
方法:while(x)
{
number++;
x=x&(x-1);
}
大概是用这个方法,效率比较高,
恩可以写。一个字节的话应该也是整形数据。
假设为
int A,B; A为整形数据。
int i1=0,i2=0,j=128;
while(A!=0)
{
if(A/j==1) i1++;
else i2++;
A=A%128;
j=j/2;
}
然后i1是1的个数
i2是0的个数