2011-03-21 2 views
1

가능한 복제를 그레이 코드를 얻을 방법 :
Gray code in .NET진수 번호에서

나는 그것의 진수 상당의 숫자의 그레이 코드를 얻을 싶어요.

예 :

Dec Gray Binary 
0 000 000 
1 001 001 
2 011 010 
3 010 011 
4 110 100 
5 111 101 
6 101 110 
7 100 111 
+1

Google의 첫 번째 페이지는 C#에서 전체 솔루션 모음을 제공합니다. – BrokenGlass

답변

3

만 음이 아닌 정수에이 작업을 수행 할 가정 :

static uint BinaryToGray(uint num) 
{ 
    return (num>>1)^num; 
} 

저자가를 표현하기 위해 선택하지만 당신은 또한, 양방향으로 변환하는 방법을 제공 this blog post을 읽을 것 같아서 코드는 각 위치에 1 또는 0을 포함하는 int의 배열로 나타납니다. 개인적으로 나는 BitArray이 더 나은 선택 일 것이라고 생각합니다.

+0

메소드가 PositiveIntegerToGray로 호출되지 않거나 무언가 누락 되었습니까? 감사. – cs0815

+0

@csetzkorn, 당신이 가장 깨끗한 것을 찾는다. –

1

최상위 비트는 동일하게 유지됩니다. 나머지 비트들에 대해, 당신은 1 비트와 xor를 오른쪽으로 시프트합니다. 논리 오른쪽 시프트를하면 MSB로 이동 한 비트가 0임을 알 수 있습니다. 그러면 시프트와 xor 만 수행 할 수 있습니다.

0
#include<iostream.h> 
#include<conio.h> 
int deci,bits=0,deci_x3,bits_x3; 
int array[100][20]; 
int array1[100][20]; 
int array2[100][20]; 
void binary(int [100][20],int,int,int); 
void gray(int); 
void display(int); 
int find_bits(int); 

void main() 
{ 
textcolor(GREEN); 
textbackground(BLUE); 
clrscr(); 
cout<<"Enter the no. upto which gray code and excess 3 code is to be 
generated : "; 
cin>>deci; 
bits=find_bits(deci); 
deci_x3=deci+3; 
bits_x3=find_bits(deci_x3); 
for(int i2=0;i2<=deci;i2++) 
{ 
for(int j2=0;j2<=bits;j2++) 
{ 
array[i2][j2]=0; 
array1[i2][j2]=0; 
} 
} 
array2[0][bits_x3-1]=1; 
array2[0][bits_x3-2]=1; 
for(i2=1;i2<=deci_x3;i2++) 
{ 
for(int j2=0;j2<=bits_x3;j2++) 
{ 
array2[i2][j2]=0; 
} 
} 
cout<<" DECI NO. BINARY EQ. GRAY CODE EXCESS 3"; 
cout<<endl<<"------------------------------------------------------------- 
--"; 
display(0); 
getch(); 
for(int i=1;i<=deci;i++) 
{ 
binary(array,i,bits,0); 
gray(i); 
binary(array2,i,bits_x3,1); 
display(i); 
getch(); 
} 
} 

void binary(int array_bin[20][20],int i,int bits2,int flag) 
{ 
int ix; 
if(flag==1) 
ix=i+3; 
else 
ix=i; 
array_bin[i][bits2-1]=(array_bin[i-1][bits2-1]==0?1:0); 
for(int k1=2,i1=2;k1<=bits2;k1++,i1*=2) 
{ 
if((ix/i1)%2==0) 
array_bin[i][bits2-k1]=0; 
else 
array_bin[i][bits2-k1]=1; 
} 
} 



void gray(int i) 
{ 
//FIXING THE HIGHEST ORDER BIT FIRST 
array1[i][0]=array[i][0]; 
for(int j=1;j<bits;j++) 
{ 
if((array[i][j-1]==0&&array[i][j]==0)||(array[i][j-1]==1&&array[i][j]==1)) 
array1[i][j]=0; 
else 
array1[i][j]=1; 
} 
} 

void display(int m) 
{ 
cout<<endl; 
if(m<=9) 
cout<<" "<<m<<" " ; 
else 
cout<<" "<<m<<" " ; 
for(int j=0;j<bits;j++) 
cout<<array[m][j]; 
cout<<" " ; 
for(j=0;j<bits;j++) 
cout<<array1[m][j]; 
cout<<" "; 
for(j=0;j<bits_x3;j++) 
cout<<array2[m][j]; 
} 



int find_bits(int m) 
{ 
int k,bits1=0; 
do 
{ 
bits1++; 
k=1; 
for(int i=1;i<=bits1;i++) 
k=k*2; 
} 
while(k<=m); 
return(bits1); 
} 
+1

이것은 무엇입니까? 터보 C 코드의이 벽이 무엇인지는 명확하지 않습니다. – Gabe

+0

바이너리 및 그레이 코드 형식으로 변환하기 위해 C로 작성된 프로그램. –

+0

LOL at Turbo C - @ Coding-Freak : OP는 C#을 요구하지 않았습니다. C – BrokenGlass