https://electronics.stackexchange.com/questions/20537/how-to-identify-self-complementing-code
我已正确阅读,
但是有必要从9中减去这个数字吗?
因为在 8421 系统中 12= 1100
如果我们减去 15-12 ,那么答案是 3 ,即 0011 。
所以它也是自我补充的......
我不明白,给定的数字需要从哪个数字中减去,那个数字必须是 9 吗?
https://electronics.stackexchange.com/questions/20537/how-to-identify-self-complementing-code
我已正确阅读,
但是有必要从9中减去这个数字吗?
因为在 8421 系统中 12= 1100
如果我们减去 15-12 ,那么答案是 3 ,即 0011 。
所以它也是自我补充的......
我不明白,给定的数字需要从哪个数字中减去,那个数字必须是 9 吗?
如果权重之和为 9,则它是自互补的,例如 5211=(5+2+1+1)=9 或 2421=(2+4+2+1)=9 8421 不是自互补的,所以 ,8421! =9。
Base-10 的自补码是给定编码数字d [0-9] 的补码将产生 9-d的代码,即 9 的补码。
要将 Base-10 数字编码为二进制,我们需要能够表示 10 个值 [0-9],这意味着我们需要 4 位,因为 3 位可以表示 8 个值,这还不够;4 位可以表示 16 个值,这比我们需要的要多,但我们没有(或不想要)小数位。
在这 4 位中可能有多种编码方案,其中最直观的是 8-4-2-1 方案,或十进制值的直接二进制编码。要使用 8-4-2-1 对 12 进行编码,您需要将 [1] 和 [2] 分别编码为它们各自的二进制表示 [0001] 和 [0010]。
9 的补码在二进制编码十进制/Base-10 数字的上下文中是相关的,因为 9 是编码 Base-10 数字时所需的最大值。
您的示例暗示 Base-16,显示为十进制,您正确生成 15 的补码而不是 9 的补码。8-4-2-1 直观上是 Base-16 的自补码,因为取 4 位二进制数的补码与从 15 中减去它相同。
对于以相同方式表示的 Base-10 数字则不能这样说,因为我们在 16 个成员代码空间中仅表示 10 个值,这就是为什么设计了许多更复杂的系统来生成自补充代码来表示4 位二进制数中的十进制数。
此处的表 13.1:[ http://www.inf.fu-berlin.de/lehre/WS00/19504-V/Chapter1.pdf ] 显示了十进制编码的两个自补码,即 8,4,-2, -1 和excess-3 编码方案,随后的部分描述了自补码背后的目的和理论。
一些改写澄清:IIRC这意味着当从9中减去可见数字时,编码的“数字”是位反转的,即从15中减去。
可以编码例如0 = 0011, 1 = 0100, 2 = 0101, ..., 9 = 1100(所谓的excess-3,详见莫迪的回复。