[小米]懂二进制

时间限制:1秒 空间限制:32768K 热度指数:35899

算法知识视频讲解

题目描述

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?

输入例子:
1999 2299
输出例子:
7思路:在二进制中,统计两个数的相应位不同可以利用异或,运算结果相同为0,不同为1,所以异或结果中1的个数就是不同的位数。
 1 class Solution {
 2 public:
 3     /**
 4      * 获得两个整形二进制表达位数不同的数量
 5      *
 6      * @param m 整数m
 7      * @param n 整数n
 8      * @return 整型
 9      */
10     int countBitDiff(int m, int n) {
11         int res=m^n;
12         int num=0;
13
14         while(res)
15             {
16                 if((res&1)==1)
17                     ++num;
18                 res=res>>1;
19         }
20
21         return num;
22
23     }
24 };
时间: 2024-10-17 13:37:52

[小米]懂二进制的相关文章

2015小米暑期实习笔试题_懂二进制(位运算)

总共3道题,最后一道还没AC出来... 世界上有10种人,一种懂二进制,一种不懂. 那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 此题解法类似于<编程之美>上面看到的某题 代码: #include <iostream> using namespace std; int countBitDiff(int m, int n) { int sum=0; for(int i=0;i<32;i++) if(

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7

这是小米2015年暑假实习生第一道笔试题,其实不难,主要用到移位操作和或运算符就可以搞定,具体代码如下: /*世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 */ #include<stdio.h> int countBitDiff(int m, int n) { int data=1; int a,b; int count=0; for(int i=0;i<31;i+

2016校招真题编程-懂二进制

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 解题思路:异或,除二取余 源代码: package SuperHakceMainPackage; import java.util.Scanner; public class SuperHakceMian { int countBitDiff(int n,int m){ return n ^ m; } int findN

懂二进制

世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 class Solution { public: /** * 获得两个整形二进制表达位数不同的数量 * * @param m 整数m * @param n 整数n * @return 整型 */ int countBitDiff(int m, int n) { m^=n; int a=0; for(int k=0;k<32;k++

获得两个整形二进制表达位数不同的数量

这是一道小米校招真题 题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5 * 6 * @param m 整数m 7 * @param n 整数n 8 * @return 整型 9 */ 10 11 int countBitDiff(int m, int

小米2015笔试编程题

小米2015笔试编程题 1.[编程题] 懂二进制 时间限制:1秒 空间限制:32768K 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子1: 1999  2299 输出例子1: 7 分析:第一步求这两个数的异或,得到一个新的数,相同位是0,不同位是1:第二步采用位运算求这个数里边1的个数即为结果 1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5

两个int整数m和n的二进制表达有多少个位不同

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 题目分析 二进制中,统计两个数的相应位(bit)相同可以采用异或操作,异或运算结果相同为0不同为1.所以两个数异或的结果中1就是相同位数. public static int count(int a, int b) { int m = a ^ b; int num = 0; while(m>0) { m &= (m-

小米笔试题

题目:世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 背景知识:将两个二进制数变成等长(较短的那个高位补0),然后将两个二进制数进行按位“异或”,结果中为1的那些位,就是这两个二进制数不同的位. 在计算机中的数据的保存和运算都是以二进制的形式进行的,但不是直接的原码,而是原码的补码,也就是说在计算机中,数据的运算都是以数据的补码进行的. 异或: 异或(xor)是一个数学运算符.

关于二进制枚举

算是彻底搞懂二进制枚举吧. 首先一个集合的子集有2^n个,所以我们枚举的个数有(1<<n)个: 所以 for(int i=0; i<(1<<n); i++) 我们知道二进制枚举的过程如下: 每个位置值为1则保留,不为1则舍弃 : 设s=13(二进制为1101)那么我们保留0 2 3位置上的数值: 那么我们如何找到每个位置上的数值呢? 我们遍历的是二进制的十进制表示(比如13),我们当然可以转化为二进制在枚举每一位,但是,这很麻烦: 一个很巧妙的方式就是利用位运算: 1<