首页 > 解决方案 > 当其中一个为负时,如何将两个 16 位值组合成一个 32 位值?

问题描述

我在 Stack Overflow 上发现了几个线程,演示了当两个操作数都是正数时如何将两个 16 位值组合成一个 32 位值,但我发现如果任何一个操作数都是负数,这些都不起作用。

这是我目前正在使用的内容:

uint32_t combined(uint16_t low, uint16_t high)
{
  return (static_cast<uint32_t>(high) << 16) + static_cast<uint32_t>(low);
}

high这仅在和low为正时返回正确的值。当一个或两个参数为负时,如何修改此函数以返回正确的结果?

标签: c++bit-manipulation

解决方案


这是否满足您的需求:

uint32_t combined(uint16_t low, uint16_t high) {
    return (static_cast<uint32_t>(high) << 16) | ((static_cast<uint32_t>(low)) & 0xFFFF);
}

据我了解,将负数转换int为问题后领先1s。它们可以通过 删除... & 0xFFFF

&是按位and运算。0xFFFF与相同0x0000FFFF但更短,a & 0xFFFF表示“首先(高)16 位a0,其余部分保持原样”。


推荐阅读