c语言之二进制位中的常见试题(求二进制表达有多少位不一样 求出奇数和偶数位 求出二进制表达中有几个1)
2023-12-25 18:23:49
在我看来,涉及到二进制位的试题都需要对基础有很透彻的理解才做得出来。
这里,我总结三个试题。
一.求一个数的二进制表示中有几个1
这个在我的上篇博客里面进行了非常详细的介绍,有三种方法实现函数。C语言之写一个函数求一个数的二进制(补码)表示中有几个1-CSDN博客
这里就是链接。
二.求两个int类型的数的二进制表达中有多少位不同
这里,大家应该都可以想到我们肯定要用按位异或这个操作符,相同为0,相异为1。我们可以让着两个数进行按位异或操作,然后得到的这个数看它有几个1,这里就与第一个题目联系在了一起。
代码如下:
#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,我们要的那一位即奇数或偶数位就打印了出来。
代码如下:?
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为例,结果如下:
?
至此,我目前要总结的就完了,希望有所帮助。
祝:“码”思泉涌,下“指”如有神。
文章来源:https://blog.csdn.net/2301_79990723/article/details/135183626
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!