c++ - 当其中一个为负时,如何将两个 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
为正时返回正确的值。当一个或两个参数为负时,如何修改此函数以返回正确的结果?
解决方案
这是否满足您的需求:
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 位a
0,其余部分保持原样”。
推荐阅读
- c# - 是否可以从 C# 中的列表标记对 xml 文档进行分组
- php - 根据订单状态自定义 Woocommerce 电子邮件通知内容
- python - 将 numpy 数组或二维数组乘以向量的常用方法
- python - Python用前缀分割字符串
- python - 如何将数据帧拼接在一起
- python - 如何使用python在csv文件中写入和附加循环输出
- c# - 为什么我在尝试将方法附加到按钮单击时收到此错误消息?btnSalvaNota_Click 匹配委托“EventHandler”没有过载
- css - 使用示例作为指南渲染布局
- dart - 如何从底部导航栏中的选项卡更新脚手架中的文本小部件
- html - IE11 的“抓取”光标的免费图片