带你刷 · C语言 | 求两个数二进制中不同位的个数

简介: 问:输入两个整数,求两个整数二进制格式有多少个位不同?

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

问:输入两个整数,求两个整数二进制格式有多少个位不同?

输入描述:
两个整数

输出描述:
二进制不同位的个数

示例
输入
22 33

输出
5


解法

1. 确定思路

  • 要求出两个整数二进制格式有多少个位不同,既然是二进制,那肯定跟位操作符有关。其中,判断相同或者不同我们采用按位异或操作符(^),它的功能是,==相同为0,相异为1==
  • 于是我们就把这两个整数按位异或一下,出现1的位,就是不同位
  • 最后我们再统计一下1的个数就行啦

2. 编写代码

  • 按照上述思路,我们先给出主函数部分,输入得到两个整数
int main()
{
    int m, n;
    while (scanf("%d %d", &m, &n) == 2)
    {
        printf("%d\n", calc_diff_bit(m, n));
    }
    return 0;
}
  • 为了代码可读性强,我们把核心部分封装成一个函数。按照思路首先是把两个整数按位异或一下,并定义一个count用来计算不同位的个数
int calc_diff_bit(int m, int n)
{
    int tmp = m ^ n;
    int count = 0;
    
    //......
    
    return count;
}
int calc_diff_bit(int m, int n)
{
    int tmp = m ^ n;
    int count = 0;
    while (tmp)
    {
        tmp = tmp & (tmp - 1);
        count++;
    }
    return count;
}
输出结果: 在这里插入图片描述
在这里插入图片描述
  • 完美解决~掌握这个方法,在二进制中横着走

在这里插入图片描述

相关文章
|
8月前
|
存储 C语言
C语言实现二进制到十进制
C语言实现二进制到十进制
87 0
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
60 5
|
7月前
|
C语言
C语言---二进制位置0或者置1
C语言---二进制位置0或者置1
|
7月前
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
7月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
7月前
|
C语言
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
|
7月前
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
|
8月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(下)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
50 0
|
8月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(上)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
122 0
|
8月前
|
C语言
【C语言】求一个整数的二进制序列中1的个数的三种方法
【C语言】求一个整数的二进制序列中1的个数的三种方法
155 0

热门文章

最新文章