algorithm - 使用按位反转位

标签 algorithm bit-manipulation

我正在尝试在一个字节中进行位反转。我使用下面的代码

static int BitReversal(int n)
{
    int u0 = 0x55555555; // 01010101010101010101010101010101
    int u1 = 0x33333333; // 00110011001100110011001100110011
    int u2 = 0x0F0F0F0F; // 00001111000011110000111100001111
    int u3 = 0x00FF00FF; // 00000000111111110000000011111111
    int u4 = 0x0000FFFF;
    int x, y, z;
    x = n;
    y = (x >> 1) & u0;
    z = (x & u0) << 1;
    x = y | z;

    y = (x >> 2) & u1;
    z = (x & u1) << 2;
    x = y | z;

    y = (x >> 4) & u2;
    z = (x & u2) << 4;
    x = y | z;

    y = (x >> 8) & u3;
    z = (x & u3) << 8;
    x = y | z;

    y = (x >> 16) & u4;
    z = (x & u4) << 16;
    x = y | z;

    return x;
}

它可以反转位(在 32 位机器上),但是有一个问题, 比如输入10001111101,我想得到10111110001,但是这个方法会把包括heading 0在内的整个字节取反。输出为 10111110001000000000000000000000。 有什么方法可以只反转实际数字吗?我不想将它转换为字符串和反向器,然后再次转换。有没有纯数学方法或者位运算方法?

最好的问候,

最佳答案

使用类似的方法获取最高位数并将结果位向右移动 33 - #bits 瞧!

关于algorithm - 使用按位反转位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515715/

相关文章:

c# - 迷宫墙上的按位逻辑

java - 转换字节值,以便删除/恢复其 MSB

与按位运算混淆 &

algorithm - 基于重复、基于模式的数据压缩算法

c# - 设置树的边界(数据结构)

c# - 如何显示变量的公式

java - 是否建议使用父节点的引用来实现二叉搜索树?

C比较两个位图的最快方法

arrays - 使用偏移量链接数组的元素

c++ - 从 unsigned char 生成十六进制