位运算的精髓

  简直tmd绝了,位运算能被玩出这么多花活。

  给个数如2,希望你把它的二进制数偶数位的全部右移动一个。例如以前是011010 现在希望是100101。

  怎么做,

  ((num&0xaaaaaaaa)>>1 | (num&0x55555555)<<1) 直接得到答案。
  位运算的精髓

 

   用0xa来保留偶数位去除奇数位,然后右移动1,用0x5来保留奇数位去除偶数位然后左移动1.这样就告成了。

  

  值得一提的是,python中整数虽然是以补码形式保存的,但是负数特殊,负数输出的是原码的二进制前面加了个负号。所以如果想要用负数进行二进制的位运算,要先把负数&0xffffffff来把所有都置1.

位运算的精髓

上一篇:数据增强Augmentation作用、方法


下一篇:jvm 的主要组成部分?及其作用?