【发布时间】:2026-02-05 05:10:02
【问题描述】:
第n个格雷码的计算公式为:
(n-1) XOR (floor((n-1)/2))
(Source: wikipedia)
我将其编码为:
int gray(int n)
{
n--;
return n ^ (n >> 1);
}
有人能解释一下上面的公式是如何工作的,或者可能是它的推导吗?
【问题讨论】:
-
我想知道这里是否真的需要 n-- 。 n ^ (n>>1) 在代码从 0 开始计数时是完整的。
-
是的,代码从 1 开始计数,否则公式中的 (n-1) 将是 n。 IMO,“第 1 个格雷码”对我来说比“第 0 个格雷码”更有意义。