小弟电子系,今天做数电作业,用到格雷码,突然想起,这个格雷码如果用C语言输出,应该怎么样编程呢?
可能很简单,可是我不会,请求大家帮忙啊!
小弟电子系,今天做数电作业,用到格雷码,突然想起,这个格雷码如果用C语言输出,应该怎么样编程呢?
可能很简单,可是我不会,请求大家帮忙啊!
哈哈,不太董格雷码,只是对二进制感兴趣,不知对否
#define N 16
char *fun(char *str,unsigned x)
{ unsigned i;
for(i=0;i<N;i++)
str[i]=(i==0?x>>N-1&1:x>>N-i&1^x>>N-(i+1)&1)+0x30;
str[N]='\0';
return str;
}
int main()
{ int n;char str[N+1];
scanf("%d",&n);
fun(str,n);
printf("%s\n",str);
}
大家看看这是我自己编写的,当然还没有写完,我只是把四位数的格雷码按顺序转换成十进制后输出,可是不对啊,请大家修改一下.
void main()
{ int a[16];
int i;
for(i=1,a[0]=0;i<=15;i++)
{ if(i%8==0)
a[i]=a[i-1]+8;
else if((i%4==0)&&(a[i-1]&4==0))
a[i]=a[i-1]+4;
else if((i%4==0)&&(a[i-1]&4!=0))
a[i]=a[i-1]-4;
else if((i%2==0)&&(a[i-1]&2==0))
a[i]=a[i-1]+2;
else if((i%2==0)&&(a[i-1]&2!=0))
a[i]=a[i-1]-2;
else if(((i+1)%2==0)&&(a[i-1]&1==0))
a[i]=a[i-1]+1;
else if(((i+1)%2==0)&&(a[i-1]&1==1))
a[i]=a[i-1]-1;
}
for(i=0;i<16;i++)
printf("%4d\n",a[i]);
}