我想判断一个字节或整型数据的二进制中有几个1,几个0,用C写,能写吗?

2025-03-10 04:02:44
推荐回答(3个)
回答1:

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的个数

回答2:

假设要判断的数据是x的二进制有几个1
原理:x&(x-1)是吧x最有边的1变为0
方法:while(x)
{
number++;
x=x&(x-1);
}
大概是用这个方法,效率比较高,

回答3:

恩可以写。一个字节的话应该也是整形数据。

假设为

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的个数