runsisi

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  45 随笔 :: 15 文章 :: 26 评论 :: 0 Trackbacks

1.自然二进制码转换成二进制格雷码
 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。
2.二进制格雷码转换成自然二进制码
 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
 

a>自然二进制码转换成二进制格雷码

1.unsigned int型数据到格雷码的转换,最高可转换32位自然二进制码,超过32位将溢出

static unsigned int decimal_to_gray(unsigned int x)
{
 
return x^(x>>1);
}

 
2.int型数据到格雷码的转换,最高可转换31位自然二进制码,超出31位将溢出。

static int decimal_to_gray(int x)
{
 
return x^(x>>1);
}

 

b>二进制格雷码转化成自然二进制码

1.

static unsigned int gray_to_decimal(unsigned int x)
{
 unsigned 
int y=x;
 
while(x>>=1)
  y
^=x;
 
return y;
}


2.

static unsigned int gray_to_decimal(unsigned int x)
{
 x
^=x>>16;
 x
^=x>>8;
 x
^=x>>4;
 x
^=x>>2;
 x
^=x^1;
 
return x;
}


3.

static unsigned int gray_to_decimal(unsigned int x)
{
 
int i;
 
for(i=0;(1<<i)<sizeof(x)*8;i++)
 
{
  x
^=x>>(1<<i);
 }

 
return x;
}

以上代码实现了unsigned int型数据到自然二进制码的转换,最高可转换32位格雷码,超出32位将溢出。将数据类型改为int型可实现31位格雷码转换。

posted on 2009-03-15 14:00 runsisi 阅读(2071) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理