C/C++教程

C语言 求一个整数存储在内存中的二进制中 1 的个数

本文主要是介绍C语言 求一个整数存储在内存中的二进制中 1 的个数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录(涉及知识点)

方法一:先取模,再进行除运算

算数操作符

方法二:与运算、右移、for循环、if判断

位操作符

移位操作符

方法三:whlie循环、与运算                 ——最高效的


方法一:先取模,再进行除运算


#include<stdio.h>

int main()
{
	int num = 0;
    scanf("%d", &num);
    int count = 0;
	
    while(num)
    {
	    if(num % 2 == 1)
        count++;
        num = num /2;
    }

	printf("二进制中1的个数为:%d\n", count);
	
	return 0;
}

算数操作符

/ ,只要有double浮点数时,printf用%lf,(默认6位

% ,操作数必须都是整数

方法二:与运算、右移、for循环、if判断

#include<stdio.h>
int main()
{
    int num = 0;
    int count = 0;
    scanf("%d",&num);

    int i ;
    for(i = 0; i <32; i++)
    {
        if(1==((num >> i) & 1))
            count++;
    }
    printf("二进制中1的个数为:%d\n",count);
    return 0;
}

位操作符

  1. &   按 二进制  位与  。  两个同时为1,才是1。有0全是0
  2. |     按 二进制  位或  。  两个同时为0,才是0,有1全是1
  3. ^    按 二进制  位异或。 两个相同为0,相异为1

移位操作符

   1.操作数只能是整数   

   2.移动的是二进制位

>>:右移操作符 。包括  算术右移与逻辑右移

算术右移:是符号位要一起移动,并且在左边补上符号位

逻辑右移:是将二进制数整体右移,左边补0即可 

<<:左移操作符 。左边丢弃,右边补零

Int a=-1

Int b=a>>1

b还是是-1

源码:符号位 (正0负1

反码:符号位不变,其余与源码相反

补码:反码末位+1

方法三:whlie循环、与运算


特点:循环直到num为0,循环多少次,就有多少个1,不用再用 if判断

#include<stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);

	int count = 0;
	while (num)
    {
		num = num & (num - 1);   
		count++;
	}
    printf("二进制中1的个数为:%d\n", count);
	return 0;
}

这篇关于C语言 求一个整数存储在内存中的二进制中 1 的个数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!