/**spa
* 功能:交換某個整數的奇數位和偶數位,使用指令越少越好(即,位0與位1交換,位2與位3交換,以此列推)。.net
*/get
這題要交換的是整數二進制的奇數和偶數位。it
按照通常的解題確定會對每一位分別處理,即,將整數換成二進制,而後遍歷一遍,交換奇數位和偶數位。這樣效率不高,指令也很多。而後看大題目解析,感受用位操做很棒,如下爲解題思路:class
(1)先操做奇數位,把101010(即0xAA)做爲掩碼,提取奇數位,並右移1位到偶數位置效率
(2)操做偶數位,把010101(即0x5555)做爲掩碼,提取偶數位,並左移一位到奇數位置遍歷
(3)將兩次操做結果合併成一個值。二進制
操做32位數時,掩碼用8位十六進制便可,若是是64位,就要用16位十六進制掩碼。static
這樣作的好處是,不須要將整數換成二進制,直接位操做返回的就是交換後的十進制整數,操做少。co