写一个宏可以将一个数字的奇数位和偶数位交换

    xiaoxiao2021-04-03  32

    如何交换一个数字的奇数比特位和偶数比特位呢?

    1.首先,要想办法得出奇数为和偶数位

    由 与(&) 的特性可知:任何数 &1等于它本身,0&任何数都为0。

    所以要得出奇数位 :给奇数位都&1,偶数位都&0

                             即 :num&0101 0101 0101 0101 0101 0101 0101 0101

                             得到它所有奇数位     num & 0x55555555

           要得出偶数位 :给偶数位都&1,奇数位都&0

                             即 :num&1010 1010 1010 1010 1010 1010 1010 1010

                             得到它所有偶数位     num&0xaaaaaaaa

    2.其次,将奇数位和偶数位互换

        奇数位左移一位到偶数位  (num&0x55555555)<<1

        偶数位右移一位到奇数位  (num&0xaaaaaaaa)>>1

    代码如下:

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define CHANGE(num) ((((num) & 0xaaaaaaaa) >> 1) | (((num)& 0x55555555) << 1)) int main() { int num = 0; scanf("%d",&num); printf("%d\n",CHANGE(num)); return 0; } 结果验证:输入 10  其二进制为(1010),                   输出  5   其二进制为(0101)。

    转载请注明原文地址: https://ju.6miu.com/read-665906.html

    最新回复(0)