首页 > 解决方案 > 确定 16 位二进制数是负数还是正数

问题描述

我正在为温度传感器创建一个库,该库具有正在返回的二进制 16 位值。我试图找到检查返回的值是负数还是正数的最佳方法。我很好奇我是否可以检查最高有效位是 1 还是 0,如果这将是最好的方法,如何成功实现它。

我知道我可以将其转换为十进制并以这种方式进行检查,但我只是好奇是否有更简单的方法。我已经看到它通过改变值来实现,但我并不完全理解这种方法。(我是 C++ 的超级新手)

float TMP117::readTempC(void)
{
    int16_t digitalTemp;      // Temperature stored in the TMP117 register

    digitalTemp = readRegister(TEMP_RESULT); //Reads the temperature from the sensor

    // Check if the value is a negative number
    /*Insert code to check here*/

    // Returns the digital temperature value multiplied by the resolution
    // Resolution = .0078125
    return digitalTemp*0.0078125; 
}

我不确定如何检查代码是否有效,并且我无法编译它并在设备上运行它,因为新的 PCB 设计和传感器尚未寄出。

标签: c++

解决方案


我知道我可以将其转换为十进制并以这种方式检查

我不确定你的意思。整数是整数,它是一个算术对象,您只需将其与零进行比较:

if( digitalTemp < 0 )
{
    // negative
}
else
{
    // positive
}

您可以按照您的建议测试 MSB,但没有特别的好处,它缺乏清晰性,并且如果类型发生digitalTemp更改会中断或需要修改。

if( (digitalTemp & 0x8000 )
{
    // negative
}
else
{
    // positive
}

“转换为十进制”,只能解释为转换为整数的十进制字符串表示,这不会使您的任务变得更简单,并且完全没有必要。

我不确定如何检查代码是否有效,并且我无法编译它并在设备上运行它,因为新的 PCB 设计和传感器尚未寄出。

在带有硬件相关功能存根的测试工具中编译并在 PC 上运行它。坦率地说,如果您是 C++ 新手,那么您最好在 PC 环境中练习基础知识,通常具有更好的调试设施和更快的开发/测试迭代。


推荐阅读