将14位左对齐的二进制补码转换为有符号短整型。

3
我有两个字节,其中包含一个14位左对齐的二进制补码值,并且我需要将其转换为有符号短整型值(范围从-8192到+8191,我猜是这样?)
最快的方法是什么?
2个回答

4

只需要将其除以4即可。

(注意,右移操作可能会导致实现/未定义的行为。)


1
一个便携的解决方案:
short convert(unsigned char hi, unsigned char lo)
{
  int s = (hi << 6) | (lo >> 2);
  if (s >= 8192)
    s -= 16384;
  return s;
}

我现在使用的是:x = ((int16_t)((byte[0] << 8) | byte[1]) / 4),看起来运行良好。你的解决方案更具可移植性还是更快? - Maestro
哪个更快取决于编译器。你的代码会导致一个带符号整数类型 int16_t 溢出从而产生未定义行为。 - Alexey Frunze
@AlexeyFrunze 这段代码无法编译,因为参数名称不匹配(lolow)。 - unwind
@unwind 喜欢修复代码时删除其中一部分,即使只是一个字符。 :) - Alexey Frunze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接