格雷码到二进制码转换
所以我正在尝试编写一个将7位格雷码转换为相应的7位二进制码的函数。
这是如何转换 -
灰度值位---- MS位>(G6)G5 G4 G3 G2 G1 G0
*
二进制值位 - MS位>(B6)B5 B4 B3 B2 B1 B0
*
B6 = G6 // MS位始终相同
B5 = B6 ^ G5 //将这些位独占“或”以构造7位二进制值
B4 = B5 ^ G4
B3 = B4 ^ G3
B2 = B3 ^ G2
B1 = B2 ^ G1
B0 = B1 ^ G0
到目前为止,这是我的功能 -
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;
}
我需要找到一种方法来为每次循环运行访问所需的特定位...需要以某种方式访问像数组一样的位...
任何想法/指针?谢谢 :)
没有找到相关结果
已邀请:
5 个回复
良阑纠苫
操作滤除其他位。这些按位结果进行OR运算以创建整体结果。重复连续位。它甚至不值得为此循环...只是额外的可能的运行时开销和源代码复杂性。
催备南菠亨
你只需要改变你的所以它从4 downto零
羔磺
杰黔轿缺
要访问特定位,使用
向左移“1”i次,产生一个全零的数字,除了右边第i个位置的数字。这可以与Gray或Bin进行AND运算,将除了我们关心的所有位置零。然后使用
右移结果,将我们关心的位移到最右边。我们使用^来对这两个位进行xor,然后将其向左移动到结果位所属的位置,或者将它向内移位Bin。 这给出了一个非常有用的解释。
俺呵誓放胳