No.20代码练习:求二进制1的个数,二进制奇偶位,输出整数每一位,两个数二进制中不同位的位数

学习不易,需要坚持。

  1. 写一个函数返回参数二进制中 1 的个数
    比如: 15 0000 1111 4 个 1
    程序原型:
    int count_one_bits(unsigned int value)
    {
    // 返回 1的位数
    }

  2. 获取一个数二进制序列中所有的偶数位和奇数位,
    分别输出二进制序列。

  3. 输出一个整数的每一位。

  4. 编程实现:
    两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
    输入例子:
    1999 2299
    输出例子:7

1.
//写一个函数返回参数二进制中1 的个数比如:15       0000 1111     4 个1


#include <stdio.h>

int count_one_bits( int value)
{
	int count = 0 ;
	int i = 0 ; //控制循环次数
	for(i=0; i<32; i++)
	{
	    //获取每一个二进制位
		if( ( ( value>>i ) & 1) == 1 ) 
		{
			count++ ;
		}
	}
	return count ;
}

int main()
{
	int ret = 0 ;
	int input = 0 ;
	printf("----------此程序为了求出某数二进制序列中1的个数----------\n") ;
	printf("请为input赋值: ") ;
	scanf("%d", &input) ;
	ret = count_one_bits(input) ;
	printf("%d的二进制序列中1的个数为:%d\n", input, ret) ;
	return 0 ;
}

运行结果:
在这里插入图片描述

2.
//获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。

#include <stdio.h>

void Get_num(int n)
{
	int i = 0 ;//控制循环次数
	//先获取奇数位,所以i从开始
	printf("奇数位: ") ;
	for(i=0; i<32; i+=2) 
	{
		//让n右移i位与进行&操作,得到本位的值
		printf("%d ", ((n >> i) & 1)) ;
	}

	printf("\n偶数位: ") ;

	
	//再获取偶数位,所以i从开始
	for(i=1; i<32; i+=2)
	{
		//让n右移i为与进行&操作,得到本位的值
		printf("%d ", ((n >> i) & 1)) ;
	}

	printf("\n") ;

}

int main()
{
	int n = 0 ;
	printf("----------此程序为了获取某数二进制中的奇数位和偶数位----------\n") ;
	printf("请输入一个整数: ") ;
	scanf("%d", &n) ;
	Get_num(n) ;
	return 0 ;
}

分析:
在这里插入图片描述
运行结果:
在这里插入图片描述

3.
//输出一个整数的每一位。

#include <stdio.h>

void Print_Decimal_bits(int n) 
{

	if(n >9)
	{
		Print_Decimal_bits(n / 10) ;
	}
	printf("%d  ", n % 10) ;

}


int main()
{
	int n = 0 ;
	printf("----------此程序为了获取某数的十进制每一位----------\n") ;
	printf("请输入一个数字: ") ;
	scanf("%d", &n) ;
	printf("十进制的每一位为: ") ;
	Print_Decimal_bits(n) ; //打印十进制每一位
	printf("\n") ;
	return 0 ;
}

运行结果:
在这里插入图片描述

4.
//两个int(位)整数m和n的二进制表达中,有多少个位(bit)不同?
//例如:1999 2299   有7个不同的比特位
#include <stdio.h>

//方法一:
int Differ_bits1(int m, int n)
{
	int count = 0 ; //计数器
	int i = 0 ; //控制循环次数
	for(i=0; i<32; i++)
	{
		if( ((m>>i) & 1) != ((n>>i) & 1) )
			count++ ;
	}
	return count ;
}

//方法二:
int Differ_bits2(int m, int n)
{
	//通过求两数异或结果中的个数,即为不同位的个数
	int ret = m ^ n ;
	int count = 0 ;
	int i = 0 ; //控制循环次数
	for(i=0; i<32; i++)
	{
		if( 1 ==((ret>>i) & 1) )
			count++ ;
	}
	return count ;
}

int main()
{
	int m = 0 ;
	int n = 0 ;
	int ret1 = 0 ;
	int ret2 = 0 ;
	printf("请输入两个值: ") ;
	scanf("%d%d", &m, &n) ;
	ret1 = Differ_bits1(m, n) ;
	ret2 = Differ_bits2(m, n) ;
	printf("不同位的个数为: %d\n", ret1) ;
	printf("不同位的个数为: %d\n", ret2) ;
	return 0 ;
}

运行结果:
在这里插入图片描述

学习不易,需要坚持。

猜你喜欢

转载自blog.csdn.net/studyhardi/article/details/83926254
今日推荐