zoukankan      html  css  js  c++  java
  • 给一个int型整数,如何将这个整数的奇偶位互换

    题目: 假设一个8为整数是(10101100)b那么奇偶互换之后就是(01011100)b。假设机器是32位的

    注意: 8位中最低位开始数,最低位是第0位,是偶数为,次低位时第1位,是偶数位。


    做法: ((a>>1)&0x5555555) | ((a<<1)&0xaaaaaaaa)

    解释

    a>>1,所有的bit都右移一位,相当于奇数位的bit到了偶数位,然后和0x5555555做与操作,相当于只留下了偶数位,也就是原来的奇数位。

    例如 11111010 >>1  => 01111101  & 0x55 => 01010101

    a<<1,所有的bit都左移一位,相当于偶数位的bit到了寄数位,然后和0xaaaaaaaa做与操作,相当于只留下了奇数位,也就是原来的偶数位。

    例如 11111010 <<1  => 11110100  & 0xaa => 10100000

    最后将上面的结果做与操作,就是把移位好的奇偶两部分合在一起。

    01010101 | 10100000 =》 11110101

    这就是最终结果

  • 相关阅读:
    第四周编程总结
    第三周编程总结
    第二周编程总结
    查找整数 编程总结
    求最大值及其下标 编程总结
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    作业01
    第八周作业
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3304173.html
Copyright © 2011-2022 走看看