Achso, ich dachte, du brauchst die andere Richtung...

Hab grad aml was gehackt und das scheint es zu tun. Frag nicht, wie ich drauf komme, ist mathematische Intuition... *fg*

Code:
import java.io.*;

public class Gray
{
	public static void main (String[] args)
	{
		System.out.println ("Hallo Welt!");

		int n = 2;

		try
		{
			if (args.length >= 1)
				n = Integer.parseInt (args[0]);
		}
		catch (Exception ex) {}

		System.out.println ("n = " + n);

		for (int i=0; i < (1 << n); i++)
		{
			int dec = 0;
			int ii = i;
			for (int b = n-1; b >= 0; b--)
			{
				if (0 != (ii & (1 << b)))
				{
					dec |= (1 << b);
					ii ^= 0xffffff;
				}
			}
			System.out.println ("[" + i + "] -> " + dec);
		}
	}
}
i Läuft von 0 bis 2^n und wird Gray-decodiert. Scheint zu stimmen

In C sieht's dann genauso aus.

Code:
D:\java\sources>java -cp . Gray 4
Hallo Welt!
n = 4
[0] -> 0
[1] -> 1
[2] -> 3
[3] -> 2
[4] -> 6
[5] -> 7
[6] -> 5
[7] -> 4
[8] -> 12
[9] -> 13
[10] -> 15
[11] -> 14
[12] -> 10
[13] -> 11
[14] -> 9
[15] -> 8