有没有已知的方法来计算两个格雷码的加法(或减法),而不必将两个格雷码转换为常规二进制代码,执行二进制加法,然后将结果转换回格雷码?我设法编写了增量和减量函数,但是加法和减法的文档记录更少,更难编写。
最佳答案
在#6下的this document中,有一种用于添加串行格雷码的算法(直接复制;注意,⊕
是xor
):
procedure add (n: integer; A,B:word; PA,PB:bit;
var S:word; var PS:bit; var CE, CF:bit);
var i: integer; E, F, T: bit;
begin
E := PA; F := PB;
for i:= 0 to n-1 do begin {in parallel, using previous inputs}
S[i] := (E and F) ⊕ A[i] ⊕ B[i];
E := (E and (not F)) ⊕ A[i];
F := ((not E) and F) ⊕ B[i];
end;
CE := E; CF := F;
end;
不幸的是,它没有说明任何有关减法的内容,但是我认为,当您可以对负数进行编码时,可以对此进行加法运算。