导读:网上关于二进制补码数据的负数都是采用取反+1进行转换,但是真的需要这么麻烦吗?这篇文章将让你真正理解补码!
假设一个 ADC 转换芯片的转化数据为补码形式,24 位精度。最大电压值为 0x7fffff,最小电压值为 0x800000,转化为十进制如下表:
![3f20e26964415fb8e3b0e25499029ac4.png](https://i-blog.csdnimg.cn/blog_migrate/3f7f4b6d7b91e2e8b09c707aa7556202.jpeg)
先思考简单的,了解一下什么是补码:
![925d9e205e832023a2ac18b0167416ff.png](https://i-blog.csdnimg.cn/blog_migrate/edc2582745589b7a212cb3409b3234bf.jpeg)
看 +127 的二进制 0111 1111b,再加 1 为 1000 0000b,马上变成负数最小值 -128。如果把 1000 0000b 看成无符号常数,那么这个数就是 +128。在这个数的基础上加 1,就是 1000 0001b,看成无符号常数就是 129,但是看成有符号常数就是 -127,因为最高位为 1 ,那么必然是负数,不可能是 129。通过分析这些数据,自己也能发现规律。
那么如何将补码转化为我们需要的数据呢?网上很多方法对负数求原码是采用补码取反 + 1 的形式进行转化,但是真的需要这么麻烦吗?