将一个32位的无符号的整数,实现高低位反转,比如31位反转后再0位,30位反转后在第1位......(不能定义新的变量) 思想:1.相邻位交换2.相邻的两位交换3.相邻的四位交换

    技术2025-11-18  34

    #include <stdio.h>

    int main(int argc, const char *argv[]) {     unsigned int a = 0xaaaaaaaa;          //交换相邻的位     a = ((a & 0xaaaaaaaa)>>1) | ((a & 0x55555555)<<1);     //交换相邻的两位     a = ((a & 0xcccccccc)>>2) | ((a & 0x33333333)<<2);     //交换相邻的四位     a = ((a & 0xf0f0f0f0)>>4) | ((a & 0x0f0f0f0f)<<4);     //交换相邻的八位     a = ((a & 0xff00ff00)>>8) | ((a & 0x00ff00ff)<<8);     //交换相邻的十六位     a = ((a >>16) | (a <<16));

        printf("change bit a = %#x\n",a);     return 0; }

     

    Processed: 0.015, SQL: 9