位运算和Go新手: D 我正在使用Go从传感器读取一些数据,并将其作为2个字节接收-假设是
0xFFFE
。它很容易转换为uint16,因为在Go中我们只需执行uint16(0xFFFE)
,但我需要将其转换为整数,因为传感器实际上返回范围从-32768到32767的值。现在我想"也许Go会很好,如果我执行int16(0xFFFE)
,它会理解我的意思吗?",但不行。我最终使用了以下解决方案(我翻译了一些来自Web的Python代码):x := 0xFFFE
if (x & (1 << 15)) != 0 {
x = x - (1<<16)
}
看起来它能正常工作,但 A) 我不是完全确定为什么,B) 它看起来有些丑陋,这本应该是将 uint16 转换为 int16 的简单解决方案。有人能帮我澄清为什么这是唯一的方法吗?或者还有其他可能的方法吗?