给定两个正整数A和B,把A变成B须要几位?也就是说A和B之间的位数有多少个是不一样的?

给定两个正整数A和B,把A变成B须要几位?也就是说A和B之间的位数有多少个是不一样的?编程

本文的解决思路来自于互联网和一些本身的理解:编程语言

编程语言为:Javaspa


首先求出两个数有多少个位数是相同的,即求出A和B的交集it

其次,求出A和B一共在占了几位在同一个数中,即求出A和B的或运算原理

再次,对上面的结果进行异或,原理就是在A和B一共所占的位数(或运算)减去相同的(交运算)扩展

而后在对得出的结果进行二进制1计数,详情能够看我上一篇的文章互联网


public static int countDifferent(int a, int b) {
int value = (a&b)^(a|b);
return count2(value);
}
二进制

其实,上面的(a&b)^(a|b)也能够通过逻辑运算的化简直接变为a^b,具体过程本身去了解static

或者你理解异或运算的含义,即求两个数的相异,也能够的出以上的答案。语言


本题目来自编程之美的扩展题

相关文章
相关标签/搜索