补码的优点是什么?

电器工程 二进制
2022-01-20 10:43:12

在某些 ADC/DAC 器件中,它们可以选择以 2 的补码形式输出/输入数据。

以二进制补码形式表示数字数据有什么优势当您可以简单地使用直接二进制代码并节省转换时间时?

4个回答

有符号整数的二进制补码表示很容易在硬件中操作。例如,取反(即x = -x)可以简单地通过翻转数字中的所有位并加一来执行。在原始二进制文件中执行相同的操作(例如使用符号位)通常需要更多的工作,因为您必须将流中的某些位视为特殊的。加法也是如此 - 负数的加法操作与正数的加法操作相同,因此不需要额外的逻辑(没有双关语)来处理负数情况。

虽然这并不意味着从您的角度来看它更容易,但作为这些数据的消费者,它确实减少了设备的设计工作和复杂性,因此可能会使其更便宜。

ADC 可以转换数据(比如输入电压在 0 和 5V 之间),您需要该数据是无符号的(0V=0, 5V=max 代码)或有符号的(2.5V=0, 0V=max -ve, 5V=max +ve)。

除了 2 的补码是签名数据的最常见的计算机表示之外,上述两种格式之间的转换完全是微不足道的:只需反转 MSB!

添加到 ADC 的内部逻辑非常便宜,并且在数据表上为 ADC 提供了另一个卖点……

如果您需要对负数的表示进行数学运算,二进制补码比偏移二进制更容易,后者将与“有符号整数”数据类型匹配。您的编译器只会知道如何处理它。否则,您将花费时钟滴答来来回转换。

在这个问题中,似乎暗示 ADC 以 2 的补码形式返回值比直接二进制返回值需要更长的时间。虽然在 ADC 的某些特定实现中可能会出现这种情况,但通常情况并非如此(例如,MSP430 系列微控制器具有片上 ADC 外围设备,它将以直接二进制或 2 的补码形式报告值,但它在两种情况下都需要相同的周期数)。

除此之外,2 的补码和直接二进制之间的选择主要取决于您的传感器如何工作以及您喜欢如何处理数据。

在直接二进制模式下,ADC 为您提供一个数字,该数字表示测量的模拟量(几乎总是电压)的幅度与满量程参考量之间的比率。例如,10 位 ADC 可以返回 0 到 1023(含)的值。如果您测量的电压(例如 1.25 伏)是 ADC 参考电压(例如 2.50 伏)的一半,那么您读取的二进制代码将是您可以读取的最大值的一半——所以,512 或大约,受到 ADC 中的舍入和非线性的影响。

例如,假设您有一个传感器,可以报告油箱中的火箭燃料量。0V 表示油箱是空的,2.5V 伏特表示它是满的。因此,您只需将换能器连接到您的 ADC,然后就可以使用了!

但请注意,在上一段中,没有办法测量负电压。如果我们想测量进出油箱的火箭燃料流量怎么办(我们有一个传感器可以做到这一点)?ADC 无法测量负数,所以我们遇到了问题。但是,有一种使用 2 的补码模式来伪造它的简单方法:在这种情况下,传感器输出被重新偏置,以便零点位于 ADC 的两个参考电压之间的中间。换句话说,正流由 1.25V 和 2.50V 之间的电压表示,负流由 1.25V 到 0V 表示——因此流入油箱将给出 512 到 1023 的 ADC 代码,流出谢谢将给出511 到 0 的代码(直接二进制格式)。

现在这非常不方便。在对它进行任何操作之前,我们必须从每个测量值中减去 512,从而得到 -512 到 +511 范围内的数字。2 的补码模式的意义在于它会为您做到这一点!

但是,您仍然可能希望将直接二进制文件与产生有符号结果的转换器一起使用。例如,您的传感器可能具有差分输出:在这种情况下,您无论如何都希望从非反相输出中减去反相输出,因此使用 2 的补码没有任何优势。