按位摆弄算法

标签 algorithm bitwise-operators bit-manipulation

如果我有一个 32 位二进制数,我想用我拥有的 16 位数字替换该二进制数的低 16 位,并保留该数字的高 16 位以生成新的二进制数数字..我如何使用简单的按位运算符来做到这一点?

例如32位二进制数是:

1010 0000 1011 1111 0100 1000 1010 1001

我的低 16 位是:

                    0000 0000 0000 0001

所以结果是:

1010 0000 1011 1111 0000 0000 0000 0001

我该怎么做?

最佳答案

分两步完成:

  • 屏蔽掉要替换的位(并将其替换为 0)
  • 填写替换项(或用新位填写)

所以在你的情况下,

i32 number;
i32 mask_lower_16 = FFFF0000;
i16 newValue;

number = (number AND mask_lower_16) OR newValue;

在实际的编程语言实现中,您可能还需要解决16位值的符号扩展问题。例如,在 Java 中,您必须像这样屏蔽 short 的高 16 位:

    short v = (short) 0xF00D;
    int number = 0x12345678;
    number = (number & 0xFFFF0000) | (v & 0x0000FFFF);
    System.out.println(Integer.toHexString(number)); // "1234f00d"

关于按位摆弄算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384816/

相关文章:

javascript - 对于 JavaScript 字符串等场景,base128 编码的可行性如何?

c++ - 如何找到满足特定属性的各种长度的连续序列的数量?

python - Forster-Overfelt 版本的 Greiner-Horman 多边形裁剪算法的伪代码有什么问题?

c++ - 有没有一种快速的方法/技巧可以在文件的开头添加一位?

c# - 计算 Int32 中的前导零

c - 为什么该函数可以正常使用 float 而不能使用 double?

ruby - ruby 中大型数组中的快速近似字符串匹配

algorithm - AVL树删除

javascript - 使用 % 和获取奇数/偶数的最低有效位之间的区别

c - char的奇怪行为