【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

相关文章
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
2564 5
|
C语言
【C语言】原码、反码、补码详解 -《码上有道 ! 》
在计算机科学中,整数的表示方式有多种,包括原码、反码和补码。这些表示方式主要用于解决整数的二进制表示和计算问题。本文将详细介绍这三种表示方法,并通过示例来说明它们的原理和应用,特别是它们在C语言中的应用。
2803 5
|
C语言
C语言:从键盘读入三个整数,按从大到小输出
C语言:从键盘读入三个整数,按从大到小输出
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
841 23