因此,我试图编写一个将7位格雷代码转换为相应的7位二进制代码的函数。
转换方法如下-
*
*
到目前为止,这是我的功能-
unsigned short Gray_to_Bin(unsigned short Gray)
{
unsigned short Bin;
unsigned short i;
unsigned short mask;
mask = 0x40; // Initial mask
Bin = 0;
Gray &= 0x7f; // Mask bit 7 (Index Bit)
Bin = Gray & mask; // Set B6 = G6
for (i=0; i<6; i++) // Set B5, B4, ..., B0
{
// Code needed here!!
}
return Bin;
}
我需要找到一种方法来访问循环的每次运行所需的特定位...需要像访问数组一样以某种方式访问这些位...
有任何想法/指标吗?谢谢 :)
最佳答案
下面按照您给出的要求实现结果的按位组合。
对于B5,我只是将B6值右移一位,以使其与灰色位G5对应,对它们进行XOR,然后使用
&
操作将其他位过滤掉。对这些按位结果进行“或”运算以创建整体结果。重复执行连续的位。甚至没有必要为此做一个循环……仅仅是额外的可能的运行时开销和源代码复杂性。unsigned short gray_to_binary(unsigned short gray)
{
unsigned short result = gray & 64;
result |= (gray ^ (result >> 1)) & 32;
result |= (gray ^ (result >> 1)) & 16;
result |= (gray ^ (result >> 1)) & 8;
result |= (gray ^ (result >> 1)) & 4;
result |= (gray ^ (result >> 1)) & 2;
result |= (gray ^ (result >> 1)) & 1;
return result;
}