C语言每日一题(5):求两个数二进制中不同位的个数

标头C语言每日一题(5):求两个数二进制中不同位的个数_第1张图片


  • 文章主题:求两个数二进制中不同位的个数
  • 所属专栏:C语言每日一题
  • 作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想
  • 个人主页:[₽]的个人主页

目录

  • 前言
    • 编程起因
    • 项目介绍
  • 设计思路
    • 1.整体逻辑
    • 2. 具体逻辑
  • 代码展示
    • 方法一 :遍历两二进制码位来比较不同(常规做法)
    • 方法二 :巧用异或(难度较高)
  • 效果展现
  • 结语


前言

编程起因

最近刚学位操作符以及二进制码的相关知识,于是想出了求两个数二进制中不同位的个数这道题加深一下自己对于这方面的理解。

项目介绍

设计了一个求两个数二进制中不同位的个数的项目。


设计思路

1.整体逻辑

方法一用常规做法每一位进行比较不同计数器就加一来得出两二进制位种不同位的个数,方法二则是利用按位与的特性(不同位相异则该位为其两位的差值1,相同也是为两位的差值0,原理类似于数学中的按位求绝对值在赋值到该位上),再用C语言每日一题第3天的知识(Count_1()函数设计),调用那个函数的三种方法之一,或者自己再在该项目中设计出那三种方法,即可对该题进行完美求解。

2. 具体逻辑

与代码展示中的逻辑相同这里不作过多解释。


代码展示

方法一 :遍历两二进制码位来比较不同(常规做法)

#include 
int main()
{
	int n1 = 0, n2 = 0;
	printf("Please enter two numbers:\n");
	scanf("%d%d", &n1, &n2);
	int count = 0;
	for (int bits = 0; bits <= 32; bits++)
	{
		if (((n1 >> bits) & 1) != ((n2 >> bits) & 1))//遍历二进制码位数
		                                             //比较两位是否不同
		{
			count++;//如若不同则计数器加一
		}
	}
	printf("The number of different bits in two binary sequences:\n");
	printf("%d", count);
	return 0;
}

方法二 :巧用异或(难度较高)

#include 
int main()
{
	int n1 = 0, n2 = 0, n = 0;
	printf("Please enter two numbers:\n");
	scanf("%d%d", &n1, &n2);
	n = n1 ^ n2;//按位异或,将两二进制码位按位异惑,不同位按位与后会变成
	            //1相同位则为0,再用第3天的Count_1()函数的方法计算出每
	            //位中1的个数(所以用这种方法的话实际上还可以划分出同
	            //一思路不同取1做法的3种小方法,读者可自行去结合第3天
	            //Count_1()的做法迁移运用一下,在这不作过多赘述)
	int count = 0;
	for (int bits = 0; bits <= 32; bits++)//计算1的方法:第3天Count_1()
	                                      // 函数方法一
	{
		if (((n >> bits) & 1) == 1)
		{
			count++;
		}
	}
	printf("The number of different bits in two binary sequences:\n");
	printf("%d", count);
	return 0;
}

效果展现

C语言每日一题(5):求两个数二进制中不同位的个数_第2张图片


结语

以上就是我对求两个数二进制中不同位的个数这个项目的解题思路,代码以及效果展示,希望对你的C语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!


你可能感兴趣的:(C语言每日一题,c语言,开发语言,学习)