答案 0 :(得分:1)
algorithm on wikipedia的链接非常有用。
BCD是二进制编码的十进制。这意味着它是十六进制的,但只使用数字0-9。
该算法将一堆左移一个。每个左移一个相当于乘以二。当您将十六进制数字乘以2时,如果它是8或更高,它将进入下一个数字。对于BCD,如果它是5或更高,你希望它携带,所以它的行为就像十进制。
在每个班次之前,测试每个BCD数字。如果它高于4,则增加3.数字必须在A之下才能有效BCD,因此不会携带。当转变发生时,3将神奇地消失回BCD。
值0,1,2,3,4是显而易见的。乘以两个只是作品。值5,6,7,8,9是棘手的比特。它们应该以十进制映射到10,12,14,16,18。在十六进制中,它们映射到A,C,E,10,12,这些都恰好与期望值相差6,即3 * 2,这就是为什么在数字乘以2之前添加3的原因。
由于左移位与输入位一样多,所以所有位都已移入输出区。由于每个班次都会测试每个BCD数字,因此过滤掉任何十六进制数字。