如果我有一个 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/