我正在为温度传感器创建一个库,该库具有返回的16位二进制值。我试图找到最好的方法来检查返回的值是负还是正。我很好奇我是否可以检查最高有效位是1还是0,以及这是否是实现它的最佳方法以及如何成功实现它。
我知道我可以将其转换为十进制并进行检查,但是我只是好奇是否有更简单的方法。我已经看到它是通过移动值来实现的,但是我并不完全了解该方法。 (我是C ++的新手)
{
"ResponseMetadata":{
"ResponseCode":"HS000000",
"ResponseDescriptionText":"Success"
}
}
我不确定如何检查代码是否有效,并且由于尚未提供新的PCB设计和传感器而无法编译并在设备上运行它。
答案 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;
}