遇到的一个补码问题

遇到的补码问题

背景

多年没有使用或者复习过C语言,现在因为项目需要进行STM32的程序开发,在阅读一个温度传感器的数据手册时发现它是将温度值在芯片中自动进行AD转换,然后以二进制补码的形式存在十六位寄存器中。由于已经忘记了反码补码的概念,所以去复习了一把。

过程

最高位是符号位,0为正,1为负。正数的反码和补码为其本身;负数的反码是将除了符号位以外的位取反,而补码则是在此基础上加1。

因此,正数的补码好说,就是其本身;已知负数的补码求其原码就是刚才过程的逆运算,即减1后取反。这都很好理解。但是在对比该传感器数据手册的时候,按照给出的样例来计算,比如-10对应的补码为1 111 0101,按照刚才的算法,算出来原数应该是-11才对。

这时候往前翻数据手册才知道,原来它这个补码是two’s complement,看的时候将这个词给忽略掉了,于是百度之,才知道这是补码的另一种形式。一般说来补码是one’s complement,所以按部就班来算肯定没错,但是这个two’s complement刚好是比它大1的,这就解释了刚才的现象,怎么算都不对,怀疑人生了半天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值