【C语言】输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示

简介: 输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示

方法一:count计数法


#include<stdio.h>
int count_bit_one(unsigned int num)//负数的源码和补码不相同,所以把负数的二进制补码转化成对应的无符号的源码的数。正数的源码和补码相同。
{
    //此方法是对一个数的二进制源码进行操作的
  int count = 0;
  while (num)
  {
  if (num % 2 == 1)
  {
    count++;
  }
  num /= 2;
  }
  return count;
}
int main()
{
  int num = 0;
  scanf("%d", &num);
  printf("%d\n", count_bit_one(num));
  return 0;
}


方法二:按位与法(普通版)


#include<stdio.h>
int count_bit_one(int num)
{
  int i = 0;
  int count = 0;
  for (i = 0; i < 32; i++)
  {
  if (((num >> i) & 1) == 1)
  {
    count++;
  }
  }
  return count;
}
int main()
{
  int num = 0;
  scanf("%d", &num);
  printf("%d\n", count_bit_one(num));
  return 0;
}


方法三:按位与法(高效率版)


#include<stdio.h>
int count_bit_one(int num)
{
  int count = 0;
  while (num)
  {
  count++;
  num = num & (num - 1);//每进行一次这个操作,num的二进制表示中就少一个1,直到最后全为0
  }
  return count;
}
int main()
{
  int num = 0;
  scanf("%d", &num);
  printf("%d\n", count_bit_one(num));
  return 0;
}


运行结果


20210131150746114.png

image.png

相关文章
|
1月前
|
编译器 C语言
C语言中整数如何自动转换为浮点数
C语言中整数如何自动转换为浮点数
68 0
|
1月前
|
存储 C语言
C语言中如何选择合适的方式将整数转换为浮点数
C语言中如何选择合适的方式将整数转换为浮点数
121 0
|
1月前
|
存储 C语言
C语言实现二进制到十进制
C语言实现二进制到十进制
13 0
|
3月前
|
C语言
C语言写整数类(Integer)
C语言写整数类(Integer)
24 0
|
3月前
|
C语言
C语言程序编写:编写程序数一下 1到 100 的所有整数中出现多少个数字9
C语言程序编写:编写程序数一下 1到 100 的所有整数中出现多少个数字9
26 0
|
1月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
28 0
|
1月前
|
存储 C语言
在C语言中编写,用于从键盘接收输入的整数并判断该数是否能被3整除
在C语言中编写,用于从键盘接收输入的整数并判断该数是否能被3整除
23 0
|
1月前
|
存储 C语言
十进制转二进制,C语言的必备技能
十进制转二进制,C语言的必备技能
|
1月前
|
存储 C语言
C语言十进制转二进制
C语言十进制转二进制
26 0
|
2月前
|
存储 编译器 C语言
C语言:进制转换以及原码、反码、补码
C语言:进制转换以及原码、反码、补码