Binary Code 转换为Gray Code。
如:
Binary Code :1011 要转换成Gray Code
1011 = 1(照写第一位), 1(第一位与第二位异或 1^0 = 1), 1(第二位异或第三位, 0^1=1), 0 (1^1 =0) = 1110
其实就等于 (1011 >> 1) ^ 1011 = 1110
void gray(int n)
{
int temp = n;
cout << (temp>>1)^n << endl;
}
输出的即为n的格雷码;
还可以使用递归:
/*采用递归的方式*/
void Gra(int n,int &result,int leftshift)
{
bitset<32> bitvec(n);
if (n == 0 || n == 1)
{
result |= n<<leftshift;
return;
}
result |= (bitvec[0] ^ bitvec[1]) << leftshift;
Gra(n>>1,result,++leftshift);
}
result存储结果,leftshift给出移位的位数