C/算法:二进制翻转,这是一种固定规则吗?


我将二进制翻转的代码的一部分提出来问个问题
public static int reverse(int i)

   
  {
  
i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;
}

传入的十进制数数转换成二进制

   
  0110 1100
 

会返回

   
  1001 1100
 

也就是每两位会互相调换位置,即01、10、11、00调换了位置,我演算了一下确实可以达到这个效果,但是不明白其中的所以然,是这里有什么规律还是我把这种方式背下来就行了呢,前辈们都是怎么理解的?

我知道16进制的0x55555555=32位的0101010101...还有什么思路呢

c 算法

奈叶开后宫 11 years ago

Your Answer