逆转一个整数的二进制表示

逆转一个整数的二进制表示

(原创文章,转载请注明出处!)

直观的思路:取整数的最后一个bit,存入tmp整数的第一个bit位置;然后去倒数第二个bit,存入tmp整数的第二个bit位置,依次类推,直到所有的bit都被处理。时间复杂度:O(n), 辅助空间:O(n),n为整数所包含bit数目。

另一种思路:先交换相邻两个bit的位置;然后以两个bit为单位,交换相邻两个单位的位置;然后以4个bit为单位,交换相邻连个单位的位置;

                然后以8个bit为单位,交换相邻两个单位的位置;然后以16个bit为单位,交换相邻两个单位的位置。

例子:    1101 0101 1000 0101   0110 1011 1001 1011

step1 : 1110 1010 0100 1010   1001 0111 0110 0111   /* 相邻bit */

step2 : 1011 1010 0001 1010   0110 1101 1001 1101   /* 相邻两bit */

step3:  1010 1011 1010 0001   1101 0110 1101 1001   /* 相邻四bit */

step4:  1010 0001 1010 1011   1101 1001 1101 0110   /* 相邻八bit */

step5:  1101 1001 1101 0110   1010 0001 1010 1011   /* 相邻十六bit */

还是可以看作是一个分治思想。从step5往step1转换,更容易理解为分治思想。

 

posted @ 2014-11-12 20:41  activeshj  阅读(252)  评论(0)    收藏  举报