如果我有一个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 :(得分:8)
您可以分两步完成此操作:
所以在你的情况下,
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"
答案 1 :(得分:3)
(original32BitNumber & 0xFFFF0000) | 16bitNumber
答案 2 :(得分:1)
好吧,我可以告诉你答案。但也许这是功课。所以我不会。
请考虑您有几个选择:
| // bitwise OR
^ // bitwise XOR
& // bitwise AND
也许会画一个小桌子并决定哪一个会给你正确的结果(当你操作较大二进制数的右边部分时)。
答案 3 :(得分:1)
使用&掩盖低位然后|将16位值与32位值合并
uint a = 0xa0bf68a9
short b = 1
uint result = (a & 0xFFFF0000) | b;