給定兩個正整數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
或者你理解異或運算的含義,即求兩個數的相異,也能夠的出以上的答案。語言
本題目來自編程之美的擴展題