求两个数的二进制位不同的位置,最先想到的就是异或操作

异或:按位运算,相同为0,不同为1。

比如:

a = 6 对应的二进制表示为: 0 0 1 1 1

​ b = 9 对应的二进制表示为: 0 1 0 0 1

则 a ^ b = 14 对应的二进制表示为: 0 1 1 1 0

所以,只要算出异或之后的数的二进制表示方法里面1的个数。

比如,对于上面的异或之后为14,14的二进制里面1的个数为3,那么汉明距离就是3。

想知道是否有1,最快的当然还是位与操作

与:按位运算,相当于乘法,0与0是0,1与0是0,0与1是0,1与1是1。

所以,任何值与1相与,得到的就是就是原值二进制的最后一位

要么是1,要么是0,

这样就能得到原值的最低位是否是1。

然后再把原值整体右移一位,再查看最低位是否是1,

循环往复,就能够算出原值二进制里面1的个数了。

附上代码:

int hammingDistance(int x, int y){
int iDistance = 0;
unsigned int uiXor;
uiXor = x ^ y;
while (uiXor > 0)
{
if (uiXor & 1)
{
iDistance ++;
}
uiXor >>= 1;
}
return iDistance;
}

最新文章

  1. shiro realm 注解失败问题解决过程
  2. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
  3. BZOJ 1064 假面舞会(NOI2008) DFS判环
  4. Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 2) E. Subordinates 贪心
  5. python 优雅的使用正则表达式 ~ 1
  6. docker-py的配置与使用
  7. sphinx插入代码
  8. [JAVA关键字] static & final
  9. webservice基本功能介绍
  10. 一次使用innobackupex重新搭建主从复制报错解决方法及注意事项
  11. 软件开发者路线图梗概&书摘chapter7
  12. UVA12558 埃及分数
  13. CAD二次开发中浮动面板不浮动的问题
  14. Linux内存管理--虚拟地址、逻辑地址、线性地址和物理地址的区别(二)【转】
  15. requests https访问错误SSLError: certificate verify failed 及InsecureRequestWarning处理办法
  16. 关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要
  17. drupal 通过hook_menu实现添加菜单
  18. 树链剖分学习&BZOJ1036
  19. 用原生JS写一个网页版的2048小游戏(兼容移动端)
  20. C#转Java之路之三:多线程并发容器即线程安全的容器

热门文章

  1. 记一次虚拟化环境下Windows IO性能的解析
  2. MySql 5.7 重置root密码
  3. 1-5-vim编辑器的使用
  4. Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good
  5. WPF 数据模板使用值转换器
  6. WPF获取和设置应用程序范围的资源
  7. LINQ查询表达式---------into
  8. 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)
  9. RESTful API设计原则与规范
  10. _stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l 比较函数