#include <stdio.h>
/*输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示*/
/*将10进制转成2进制*/
void returnData(int data,char str[],int num,int count)
{
if(count == num) return ;
str[count] = (data &(1<<(num-1-count)))==0?'0':'1';
returnData(data,str,num,count+1);
}
/*对负数的原码转补码的处理:将二进制原码转成补码*/
void Ori_to_end(char str[],int num)
{
int i;//
/*除符号位,各位取反*/
for(i=1;i<num;i++)
{
if(str[i] == '0')
str[i] = '1';
else
str[i] = '0';
// str[i] = (~str[i]);
printf("%c ",str[i]);
}
printf("\n");
while(str[--num] != '0')
{
str[num] = '0';
}
str[num] = '1';
}
/*判断正负*/
void selectData(int data,char *str,int num)
{
if(data >= 0)
returnData(data,str,num,0);
else
{
returnData((-1)*data,str,num,0);
str[0] = '1';
Ori_to_end(str,num);
}
}
/*统计1的个数*/
int number(char str[],int num)
{
int i;
int j=0;
for(i=0;i<num;i++)
{
if(str[i] == '1')
j++;
}
return j;
}
int main(void)
{
char str[] = {0};
selectData(-4,str,32);
printf("%s\n",str);
printf("the number of 1 = %d\n",number(str,32));
return 0;
}
二进制中1的个数
最新推荐文章于 2024-06-08 23:28:31 发布