格雷码是一个二进制数系,其中两个相邻数的二进制位只有一位不同。举个例子,3位二进制数的格雷码序列为 000,001,011,010,110,111,101,100 记G(0)表示第1个格雷码,则有
int G(n) { return n^(n>>1); }
求某个格雷码是第几个
int rev_g(n){ int ans=0; while(n){ ans^=n; n/=2; } }