c语言之二进制位中的常见试题(求二进制表达有多少位不一样 求出奇数和偶数位 求出二进制表达中有几个1)

在我看来,涉及到二进制位的试题都需要对基础有很透彻的理解才做得出来。

这里,我总结三个试题。

一.求一个数的二进制表示中有几个1

这个在我的上篇博客里面进行了非常详细的介绍,有三种方法实现函数。C语言之写一个函数求一个数的二进制(补码)表示中有几个1-CSDN博客

这里就是链接。

二.求两个int类型的数的二进制表达中有多少位不同

这里,大家应该都可以想到我们肯定要用按位异或这个操作符,相同为0,相异为1。我们可以让着两个数进行按位异或操作,然后得到的这个数看它有几个1,这里就与第一个题目联系在了一起。

代码如下:

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int get_differ(int m, int n)
{
	int tmp = m ^ n;
	int count = 0;
	while (tmp)
	{
		tmp= tmp& (tmp - 1);
		count++;
	}
	return count;
}//这里,我用的是上一篇博客的最后一种方法
int main()
{
	int m = 0, n = 0;
	scanf("%d %d", &m, &n);
	int count = get_differ(m, n);
	printf("%d\n", count);
	return 0;
}

大家还有其他的方法,欢迎评论或私信哦。

三.得到某数二进制序列的奇数和偶数位,并分别打印

在这里,我们可以想到的是,我们要用>>这个移位操作符,得到奇数和偶数位。然后就是我们这是32位的int类型,得到奇数位,我们应该移0,2,4,......,30位,然后为了不改变顺序,我们从30位开始移;偶数位呢就是从31位开始移,移到1即可。

那么如何打印每一位呢?我们能马上想到每移一位,就让它与&1,我们要的那一位即奇数或偶数位就打印了出来。

代码如下:

cs 复制代码
void print(int m)
{
	int i = 0;
	printf("奇数位:\n");
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d ", (m >> i) & 1);
	}
	printf("\n偶数位:\n");
	for (i = 31; i >= 1; i -= 2)
	{
		printf("%d ", (m >> i) & 1);
	}
	printf("\n");
}
int main()
{
	int m = 0;
	scanf("%d", &m);
	print(m);
	return 0;
}

这里,我就输入一个15为例,结果如下:

至此,我目前要总结的就完了,希望有所帮助。

祝:"码"思泉涌,下"指"如有神。

相关推荐
我头发多我先学4 分钟前
C++ STL vector 原理到模拟实现
c++·算法
llm大模型算法工程师weng6 分钟前
Python拉取视频流的性能优化实战
开发语言·python·性能优化
机器学习之心7 分钟前
信号分解和小波阈值联合降噪 | NRBO-FMD基于牛顿拉夫逊算法优化特征模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
算法·matlab·重构·nrbo-fmd·特征模态分解
小程故事多_808 分钟前
破局 AI 编码乱象:SDD 规范驱动 + OpenSpec+SuperPowers 双框架,让 AI 写对每一行可追溯代码
开发语言·人工智能·aigc·ai编程
Lauren_Blueblue9 分钟前
第十六届蓝桥杯省赛Python研究生组-F串
python·算法·蓝桥杯·算法基础
kaico20189 分钟前
面向对象和高级特性
开发语言·python
鲸渔10 分钟前
【C++ 入门】第一个程序:Hello World 与基本语法规则
开发语言·c++·算法
‎ദ്ദിᵔ.˛.ᵔ₎12 分钟前
滑动窗口算法
算法·哈希算法
sali-tec13 分钟前
C# 基于OpenCv的视觉工作流-章46-矩形卡尺
图像处理·人工智能·opencv·算法·计算机视觉
仟濹15 分钟前
【算法打卡day39(2026-04-06~08 周一~周三)】(10道蓝桥杯真题)今日练习:蓝桥杯第13届省赛B组Cpp组
算法·职场和发展·蓝桥杯