C语言:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同(模除、移位)

原创 2016年05月30日 17:13:38
#include<stdio.h>
#include<stdlib.h>


int BitDiffer(int m,int n)
{
    int i = 0;
    int count = 0;
    for (; i < 32; i++)     /*在计算机内是按32位二进制来存储的,循环32次*/
    {
        if (m % 2 != n % 2)
        {
            count++;
        }
        m /= 2;
        n /= 2;
    }
    return count;
}


int main()
{
    int m = 0;
    int n = 0;
    scanf("%d%d", &m, &n);
    int ret = BitDiffer(m,n);
    printf("%d", ret);
    system("pause");
    return  0;
}


模除来获取每一位二进制位原理:

1111对2取模后为1
1110对2取模后为0     
则每次取模相当于得到的是该次循环二进制的最后一位
1111对2取整后为111
1110对2取整后为111
取整相当于将二进制最后一位去掉,开始下次循环


另外:

m /= 2;
n /= 2;

可换成移位:

m = m >> 1;
n = n >> 1;

 

相关文章推荐

1.编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7

方法一: 算法思想:由于要找两个数对应不同比特位的个数,可以先将两个数按位异或,然后再统计异或后的数中的一的个数,而统计二进制中1的个数有三种方法;1.这个数循环按位 于比它小1的数,直到这个数为...

【C】写一个宏将一个数字的奇数位和偶数位交换。实现两个int(32位)整数m和n的二进制表达中,位(bit)不同的个数

1.写一个宏将一个数字的奇数位和偶数位交换。 #define _CRT_SECURE_NO_WARNINGS 1 #include #define CHANGE(X) \ ((X & (0x55...

位运算笔试练习——判断两个整数(32位)的二进制表达有多少个位不同?

实习生笔试题 问题引入1、二进制表达方式——位运算 2、有多少位不同——好像只能一位一位的取比较 3、如何取得一个数的每一位呢? 4、比较完一位之后,能否把这一位去掉,比较剩下的,然后重复整个...

【C语言】2.编写函数 unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。 如在32位机器上2

*2.编写函数 unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。 如在32位机器上25这个值...
  • ybixiao
  • ybixiao
  • 2015年04月14日 20:03
  • 572

输入整数m,n,判断需要改变二进制中多少位才能使其相等

之前有碰到过给我一个整数,统计其二进制中1的个数。说来忏愧,我开始是用递归调用除2取余,判断余数,如果是1,count++,否则,count不变。尽管是实现了功能,但是效率肯定是不高的,毕竟我还用了递...

Problem A: C语言习题5.9--整数n和m之间的素数个数

整数n和m之间的素数个数

C语言实现 一个数二进制位模式从左到右翻转 reverse_bit

首先要知道这个数的二进制转化,要实现从左到右的翻转,要么让二进制数从后往前移位,要么就是从后往前读每一位都乘以2^(32-i),最后相加就行了。 举例说明吧: 如在32位机器上15这个值包含下列各...
  • ret_skd
  • ret_skd
  • 2015年03月24日 15:55
  • 736

【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。

2016年小米校招笔试第三题(西安站) 3 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共...

c语言实现一个正整数返回二进制参数的偶数位和奇数位顺序输出

编写了一个程序实现一个正整数返回二进制参数的偶数位和奇数位顺序输出,但是总觉得自己写的很麻烦,但实在想不出来怎么改的更好,毕竟只是个c入门,不懂的地方还有很多,一些语言自身能力没有办法去简化,还需要大...

如何用C语言获得整数所需的最少二进制位数

最近在开发一个业务规则的项目,遇到一个问题,就是要判断一个无符号整数的有效二进制位数是多少。例如,5的二进制形式为101b,有3个二进制位,17的二进制形式为1 0001b,有5个二进制位。问题:已知...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同(模除、移位)
举报原因:
原因补充:

(最多只允许输入30个字)