确定16位二进制数是负数还是正数

时间:2019-05-17 22:41:43

标签: c++

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

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

{      
    "ResponseMetadata":{  
        "ResponseCode":"HS000000",
        "ResponseDescriptionText":"Success"
    }
}

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

2 个答案:

答案 0 :(得分:1)

  

我知道我可以将其转换为十进制并进行检查

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

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

您可以按照您的建议测试MSB,但是它没有什么特别的好处,它缺乏明确性,并且如果digitalTemp的类型发生更改,将导致中断或需要进行修改。

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

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

  

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

在带有存根的测试工具中编译并在PC上运行它,以实现与硬件相关的功能。坦率地说,如果您是C ++的新手,那么在PC环境中实践基础知识可能更好,无论如何在任何情况下都具有更好的调试功能和更快的开发/测试迭代。

答案 1 :(得分:0)

一般

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
    if (digitalTemp < 0)
    {
         printf("Dang it is cold\n");
    }


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