給定兩個正整數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

或者你理解異或運算的含義,即求兩個數的相異,也能夠的出以上的答案。語言


本題目來自編程之美的擴展題

相關文章
相關標籤/搜索