c++ - 确定 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 设计和传感器尚未寄出。
解决方案
我知道我可以将其转换为十进制并以这种方式检查
我不确定你的意思。整数是整数,它是一个算术对象,您只需将其与零进行比较:
if( digitalTemp < 0 )
{
// negative
}
else
{
// positive
}
您可以按照您的建议测试 MSB,但没有特别的好处,它缺乏清晰性,并且如果类型发生digitalTemp
更改会中断或需要修改。
if( (digitalTemp & 0x8000 )
{
// negative
}
else
{
// positive
}
“转换为十进制”,只能解释为转换为整数的十进制字符串表示,这不会使您的任务变得更简单,并且完全没有必要。
我不确定如何检查代码是否有效,并且我无法编译它并在设备上运行它,因为新的 PCB 设计和传感器尚未寄出。
在带有硬件相关功能存根的测试工具中编译并在 PC 上运行它。坦率地说,如果您是 C++ 新手,那么您最好在 PC 环境中练习基础知识,通常具有更好的调试设施和更快的开发/测试迭代。
推荐阅读
- django - 如何使用 Celery 和 Django 将任务路由到不同的队列
- sapui5 - SAPUI5过滤栏获取过滤栏中每个过滤项的过滤值
- java - 在 eclipse 中设置 Geoserver Github 代码
- ejabberd - Ejabberd 版本 17.11 - 收到“失败的 c2s PLAIN 身份验证”错误消息
- android - 文件未从 google chrome android 浏览器打开
- firebase - 列表中出现未知的额外项目(firebase)
- hibernate - 在多个应用程序中使用 Hibernate 的单个全文索引实例
- batch-file - 如何将表达式的结果存储到 Windows 批处理脚本中的变量中?
- sql - 如何在 T-sql 中的另一个表上选择具有最后一个相关记录的表的记录
- arm - 代码执行利用 Cortex M4