博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获得两个整形二进制表达位数不同的数量
阅读量:4501 次
发布时间:2019-06-08

本文共 829 字,大约阅读时间需要 2 分钟。

这是一道小米校招真题

题目描述

世界上有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 n) {12 13 }14 };

 

目的是补全这块。通用的方法就不再赘述,下面提供一种位运算方法简便解决此题。

解决方法:

1 int countBitDiff(int m, int n) { 2        int res=m^n; 3         int count=0; 4         while(res){ 5             count++; 6             res=res&(res-1); 7         } 8         return count; 9 10     }11 }

 解析:

m和n进行异或运算以后得到res(2个数的位相同的时候为0不同为1),所以res的位中1的个数就是answer,然后进行循环对res中的1的个数计数,通过与运算

res=res&(res-1);将res中最右边的1置0(提示:res右边起的0进行与运算一定还为0,直到res最右边的1,与res-1进行与运算的时候,res-1会发生借位,res的那个1变成0,右边的0全置1,则变成了1和0与为0,把结果赋值给res完成最右边的1置0操作),依次循环直到全为0,count便存完了原来res中1的个数。

转载于:https://www.cnblogs.com/apperception/p/6661482.html

你可能感兴趣的文章
GNU make
查看>>
Visual Studio 2008 不能更改安装目录的原因
查看>>
threejs学习笔记04---相机动
查看>>
SAP Skill - How to search a field for which table it belongs
查看>>
parcel+vue入门
查看>>
基数排序
查看>>
Dell笔记本刷回低版本bios的方法
查看>>
HLP帮助文件源文件RTF文件的编写
查看>>
2.30模型字符串拷贝
查看>>
XPATH怎么获取TITLE中有中文的标签
查看>>
Tomcat中server.xml参数说明
查看>>
Wget下载终极用法和15个详细的例子
查看>>
JavaScript16进制颜色值和rgb的转换
查看>>
Laravel 输出Hellow World!
查看>>
【bzoj 十连测】[noip2016十连测第九场]Problem B: 小P的单调区间(最长上升子序列+树状数组)...
查看>>
linux--samba
查看>>
django基础之中介模型
查看>>
关于副本机制
查看>>
Oracle之存储过程
查看>>
解决电脑复选框图标不正确方法
查看>>