題目:編寫程序交換某個(gè)整數(shù)的奇數(shù)位和偶數(shù)位蠢涝,使用指令越少越好(即位0與位1交換爆存,位2與位3交換)株扛⊙啵看過題目解析之后才發(fā)覺诉探,這題要交換的是整數(shù)二進(jìn)制的奇數(shù)和偶數(shù)位.
解決思路:
1.操作奇數(shù)位,把101010(即0xAA)作為掩碼棍厌,提取奇數(shù)位肾胯,并右移1位到偶數(shù)位置.
2.操作偶數(shù)位竖席,把010101(即0x5555)作為掩碼,提取偶數(shù)位阳液,并左移一位到奇數(shù)位置.
核心代碼:
<pre><code>func swapOddEvenBits(num:Int) -> Int { return (((num & 0xaaaaaaaa) >> 1 ) | ( ( num & 0x55555555 ) << 1)) }
</code></pre>
測(cè)試代碼:
<pre><code>var bitNumber:Int = bitManager.swapOddEvenBits(num: 10) print("FlyElephant交換之后的數(shù)據(jù)---\(bitNumber)")
</code></pre>
FlyElephant.png