在单片机开发中,计算机操作的基本单位是比特(bit),在表达数据时只能使用二进制,而负数的表达与正数有所不同。
原码表示法是一种最简单直观的表示法,即将符号位和数值位一起来表示一个数。最高位是符号位, 0 表示正数,1 表示负数。但是,原码表示法在运算上存在一系列缺陷,所以在实际开发中不太常用。
例如:在8位原码下,-7的原码为10000111,+7的原码为00000111。
反码表示法是针对原码不足之处而产生的改进。对于正数与原码表示法一致,而对于负数,将其二进制表示的数值位按位取反后得到。最高位是符号位, 0 表示正数,1 表示负数。反码表示法在使用过程中存在计算速度慢、对0有两种表示方法等缺陷。
例如:在8位反码下,-7的反码为11111000,+7的反码为00000111。
补码表示法是一种能够完善原码与反码的不足,并且运算速度比前两者都快的一种数值表示方式。对于正数与原码和反码一致,对于负数,则将其反码加1得到它的补码。最高位是符号位, 0 表示正数,1 表示负数。
例如:在8位补码下,-7的补码为11111001,+7的补码为00000111。
在单片机应用中,补码表示法是最常用的表示负数的方式,因为它可以很好地结合到单片机的硬件架构中。此外,补码还可以用于位运算和算术运算中,使得计算速度更快。
例如:在单片机的ADC模块中,采集负电压时,采用补码表示,ADC的输出值为负数的补码。此时,单片机可以直接进行补码加减运算,来处理采集的数据。