有没有已知的方法来计算两个格雷码的加法(或减法),而不必将两个格雷码转换为常规二进制代码,执行二进制加法,然后将结果转换回格雷码?我设法编写了增量和减量函数,但是加法和减法的文档记录更少,更难编写。

最佳答案

在#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;



不幸的是,它没有说明任何有关减法的内容,但是我认为,当您可以对负数进行编码时,可以对此进行加法运算。

10-06 06:04