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;

 

C语言输入一个整数,输出其二进制位中1的个数

大家都知道一个十进制数转化成对应的二进制形式的方法就是对这个十进制数不断的进行模2取余,然后将它的余数逆序输出就是其二进制形式。比如说: 其二进制位中1的个数即模2取余后1的个数。   那...
  • bbwn_
  • bbwn_
  • 2016年04月12日 12:52
  • 3360

计算int 型数值在内存中二进制1的个数

今天在华为OJ上遇到这么一个题目,很简单,但是却总是得不到最好的成绩记录。因此比较了自己的程序、思路与别人的异同,发现还是有很大区别的,遂记录如下。 题目—— 输入一个int型整数,求该整数的二进...
  • linfeng24
  • linfeng24
  • 2014年06月24日 23:52
  • 1928

C++对于bit的操作 bit直接赋值 及其他技巧(未完)

最近做一个压缩程序,需要直接操作bit这一单位,但是C和C++这两个号称面向底层的语言竟然没有提供对于bit的直接支持,最小单位是bit。。 后来发现了一个间接操作bit的方法,就是凑成一个int来读...
  • pczjzwok
  • pczjzwok
  • 2013年11月27日 20:08
  • 2556

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

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

预处理标识符(两个int整数m和n的二进制表达中,有多少个位(bit)不同)

常用的预处理标识符有很多,以下是几个预定义标识符: (1)__FILE__ :表示正在编译的文件 (2) __LINE__:表示的是正在编译的文件的行号 (3)__DATE__:表示的是正在编译的日期...
  • Quinn0918
  • Quinn0918
  • 2017年04月11日 18:56
  • 581

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

1.写一个宏将一个数字的奇数位和偶数位交换。 #define _CRT_SECURE_NO_WARNINGS 1 #include #define CHANGE(X) \ ((X & (0x55...
  • qq_37924645
  • qq_37924645
  • 2017年04月12日 21:43
  • 259

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

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

【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
  • 631

Pace 6 (1.写一个函数返回参数二进制中 1 的个数;2..获取一个数二进制序列中所有的偶数位和奇数位;3. 输出一个整数的每一位;4.两个int整数的二进制表达中,有多少个位不同

//1.写一个函数返回参数二进制中 1 的个数 #include int count_one_bits(unsigned int value) { int count = 0; while (...
  • J4Ya_
  • J4Ya_
  • 2017年10月26日 21:55
  • 66

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

整数n和m之间的素数个数
  • l769255844
  • l769255844
  • 2015年12月28日 15:20
  • 2362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同(模除、移位)
举报原因:
原因补充:

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