我在DPS 310压力传感器上使用STM32 F042 F4 P6,其中要校准温度,温度系数是要读取的(是12位2的补码),我成功地读取了系数c 0:0 DE和c1:EDA.(参考DPS 310手册第14页)Datasheet
现在我需要取2的补码进行进一步的计算,在转换中会出现大量的混乱,即如果我将c 0转换为二进制并手动取2的补码,答案大约是3874(小数),但由于1个半字节都是0,如果我忽略它,我会得到34(小数)。虽然从不同的网站转换它给予各种其他的答案,我也尝试过人工智能,但这使事情变得更糟。如果我把0 DE转换成十进制和取2的补码答案是不同的,如果我直接从十六进制做答案是不同的。我知道2的补码的概念,但我不确定要考虑哪个值。
(0DE)h =(0000 1101 1110)2 ==>(1111 0010 0010)2 =(3874)10
但下面我附上了各种转换的截图:
网址:Image此处输出为(0010 0010)2 =(34)10
ChatGPT:Image在这里它给了我两个答案(1422)10和(454)10
Bing AI:Image这给出的答案为(598)10
Bard(Google AI):Image Which gave me(-1224 10
我很确定读取的十六进制系数c 0和c1的值,我用Arduino的默认库进行了验证,十六进制值分别为0 DE和EDA,但它们的2的补码分别为(222)10和(-294)10。我试着阅读各种帖子,我得到的只是对结果的困惑,有人能帮我找到真实的答案吗?
1条答案
按热度按时间pes8fvy91#
使用ChatGPT和Google Bard等AI聊天机器人时要非常谨慎。这些是语言模型,旨在产生人类听起来不准确的信息文本。它们不是数学或逻辑模型。
大多数架构,包括Arduino,都使用二进制补码。你不需要把它转换成2的补码。根据你链接的文档,它已经这样存储了。如果您的架构使用了不同的东西,您只需要转换它。在这种情况下,你将从二的补码转换,而不是它。
但是,您确实需要进行符号扩展,因为位长度不同。高阶位将以全零开始,或者其中有垃圾。对于二进制补码,这意味着查看原始的最高有效位并将其复制到新存储位置中的所有高阶位。
这会产生预期的值,并显示它们实际上是如何存储的,尽管有字节序。