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


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

目录


前言

编程起因

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

项目介绍

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


设计思路

1.整体逻辑

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

2. 具体逻辑

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


代码展示

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

c 复制代码
#include <stdio.h>
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;
}

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

c 复制代码
#include <stdio.h>
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语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!


相关推荐
许彰午1 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系2 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜2 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
chouchuang3 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空4 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen4 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼5 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
从零开始的代码生活_6 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
无相求码6 小时前
罪魁祸首:for 括号后面那个"隐形分号"
c语言
hy.z_7776 小时前
【C语言】11. 深入理解指针1
c语言·开发语言