美文网首页
[05]二进制个位不同个数-吉比特2018秋

[05]二进制个位不同个数-吉比特2018秋

作者: jdzhangxin | 来源:发表于2018-10-21 18:15 被阅读28次

1.题目描述

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

  • 输入示例:
    22 33
    
  • 输出示例:
    5 
    

2.题目解析

  • 预备知识
    异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。
    如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

  • 解题思路:
    两个数进行异或,将异或的结果与其减一进行与操作,直至为零,就是二进制不同位数的数量。

  • 实例解释

    1. 2233进行异或。
    - 十进制数 二进制数
    a 22 10110
    b 33 100001
    55 110111
    1. 然后数一下1的个数,个数为5

3.参考答案

#include <bits/stdc++.h>
using namespace std;

int main(){
  int n = 0;
  int m = 0;
  scanf("%d%d",&n,&m);
  int num = n^m;
  int count = 0;
  while(num != 0){
    if(num & 0x1) ++count; // 判断右端第一位是不是1
    num = num>>1; // 右移一位
  }
  printf("%d\n",count);
}

或者

#include <bits/stdc++.h>
using namespace std;
int main(){
  int n = 0;
  int m = 0;
  scanf("%d%d",&n,&m);
  int num = n^m;
  int count = 0;
  while(num != 0){
    ++count;
    num = (num-1)&num;// 每次去除1位
  }
  printf("%d\n",count);
}

牛客题目

相关文章

  • [05]二进制个位不同个数-吉比特2018秋

    1.题目描述 输入两个整数,求两个整数二进制格式有多少个位不同。 输入示例:22 33 输出示例:5 2.题目解析...

  • Day23

    Hamming Distance思路:比较两个数的二进制数形式里面的比特数不同的位数有多少位 【Ours】 【简洁...

  • 数学趣题

    格雷码 定义:格雷码是一个数列集合,每个数使用二进制表示,每两个相邻的数之间只有一个位元的值不同,同时最后一个数与...

  • 面试10:二进制中1的个数

    【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。【思路】一个数n,假设二进制个位上是1,则...

  • 比特币真正的价值在哪|乌托市场

    比特币的暗网之地,谁在为泡沫买单?区块律动2018-05-25 16:05收藏38评论1金融地产比特币的暗网之地,...

  • [47]走格子游戏-吉比特2018秋

    1.题目描述 G社正在开发一个新的战棋类游戏,在这个游戏中,角色只能向2个方向移动:右、下。移动需要消耗行动力,游...

  • [48无验证]字符编码-吉比特2018秋

    1.题目描述 将a,b,c,d分别编码为1,0,10,11,那么给定一个二进制串就可以对其进行解码。例如二进制串“...

  • [56]直线上的点-吉比特2018秋

    1.题目描述 给定N个三维坐标点(包含整形x,y,z),找到位于同一条直线上点的最大个数。 输入说明:第一行输入坐...

  • [06]字母数字混合排序-吉比特2018秋

    1.题目描述 输入一串字符,包含数字[0-9]和小写字母[a-z],要求按数字从小到大、字母从a到z排序,并且所有...

  • 一些概念

    数位:一个数字123,1是百位,2是十位,3是个位,百位十位个位这些就是数位 二进制权重:就是以2为底的指数,比如...

网友评论

      本文标题:[05]二进制个位不同个数-吉比特2018秋

      本文链接:https://www.haomeiwen.com/subject/aglwoftx.html