Swift-整數A轉成整數B

題目: 編寫一個函數,確定需要改變幾個位,才能將整數A轉成整數B.

解法一

改變的位就是找到兩個數字不同的位,通過異或,然后遍歷異或的結果即可.
核心代碼:
<pre><code>`
var result:Int = a ^ b
var count:Int = 0

    while result != 0 {
        if (result & 1) > 0 { // 判斷最低位是否為1
            count += 1
        }
        result = result >> 1
    }
    
    return count
}
`</code></pre>

解法二

先異或之后將異或低位不斷清零.
核心代碼:
<pre><code>`
var result:Int = a ^ b
var count:Int = 0

    while result != 0 {
        count += 1
        result = result & (result - 1) // 不斷的將低位清零
    }
    
    return count
}`</code></pre>

測試代碼:
<pre><code>var bitCount:Int = bitManager.bitSwapRequired(a: 10, b: 100) var bitCount2:Int = bitManager.bitSwapRequired2(a: 10, b: 100) print("FlyElephant--需要改變:\(bitCount)位---\(bitCount2)位")</code></pre>

FlyElephant.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 魔都的魅力,遠不止繁華,上海的老街,更別具一番風味。
    豆子殼子閱讀 309評論 2 3
  • 黛瓦白墻,古色生香,綠水縈天,漁舟唱晚。 詩意的江南,你無需涉水而行,只需踱步在輕煙長巷,折一枝楊柳,插在老舊的白...
    今夜相思雨閱讀 505評論 0 2