n ビットのグレイ コードを反復処理する方法は多数あります。いくつかは他よりも効率的です。ただし、実際にはグレイ コードは必要なく、実際のグレイ コードではなく、グレイ コード リストで変更されたビット インデックスを反復処理したいと考えています。たとえば、次の 3 ビットのグレイ コード リストを見てください。
000、001、011、010、110、111、101、100
3、2、3、1、3、2、3 を出力したいと思います。これは、リストを取得するためにビット 3、2、3 などを変更する必要があることを示しています。ここでは、1 と左からインデックスを付けています。
これを行う 1 つの方法は、グレー コードを順番に計算し、連続するペア (x, y) ごとに (x XOR y) を計算してどのビットが変化したかを特定し、(x XOR y) の整数対数底 2 を取得することです。
ただし、反復をできるだけ高速にする必要があり、30 ~ 40 ビットのグレイ コードに関心があります。
これを行う効率的な方法はありますか?