如何提取二进制数的最高位?

问题描述

如果我有一个名为 n 的 16 位数字和另一个名为 n2 的 16 位数字,并且我想将 n2 的前 8 位设置为 n。只有 n 的前 8 位应与 n2 相同,其余 8 位不应改变。遇到这种情况我该怎么办?我尝试将数字移位 8,但我不知道如何提取 n 的 MSB 并将其设置为 n2 的 MSB,然后再移位。

有人可以帮我吗?

谢谢!

解决方法

您可以将 n2 的前 8 位归零,然后将 n 的前 8 位归零:

n2 &= 0xFF00;
n2 |= (n & 0x00FF);

编辑 Eric Postpischil 注释,以下代码将 n2 的最高有效字节更改为 n 的最高有效字节。

n2 &= 0x00FF;
n2 |= (n & 0xFF00);