ahe*_*ang 5 algorithm bit-manipulation bitwise-operators
如果我有一个32位二进制数,并且我想用我所拥有的16位数替换二进制数的低16位,并保持该数字的高16位以产生新的二进制数.我怎么能用简单的按位运算符呢?
例如,32位二进制数是:
1010 0000 1011 1111 0100 1000 1010 1001
Run Code Online (Sandbox Code Playgroud)
而我的低16位是:
0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)
结果是:
1010 0000 1011 1111 0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
您分两步执行此操作:
所以在你的情况下,
i32 number;
i32 mask_lower_16 = FFFF0000;
i16 newValue;
number = (number AND mask_lower_16) OR newValue;
Run Code Online (Sandbox Code Playgroud)
在实际的编程语言实现中,您可能还需要解决16位值上的符号扩展问题.例如,在Java中,您必须屏蔽这样的高16位short:
short v = (short) 0xF00D;
int number = 0x12345678;
number = (number & 0xFFFF0000) | (v & 0x0000FFFF);
System.out.println(Integer.toHexString(number)); // "1234f00d"
Run Code Online (Sandbox Code Playgroud)