题目:编写程序交换某个整数的奇数位和偶数位,使用指令越少越好(即位0与位1交换,位2与位3交换)。看过题目解析之后才发觉,这题要交换的是整数二进制的奇数和偶数位.
解决思路:
1.操作奇数位,把101010(即0xAA)作为掩码,提取奇数位,并右移1位到偶数位置.
2.操作偶数位,把010101(即0x5555)作为掩码,提取偶数位,并左移一位到奇数位置.
核心代码:
<pre><code>func swapOddEvenBits(num:Int) -> Int { return (((num & 0xaaaaaaaa) >> 1 ) | ( ( num & 0x55555555 ) << 1)) }
</code></pre>
测试代码:
<pre><code>var bitNumber:Int = bitManager.swapOddEvenBits(num: 10) print("FlyElephant交换之后的数据---\(bitNumber)")
</code></pre>
网友评论