Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从十进制数中提取格雷码_C#_.net_Numbers_Gray Code - Fatal编程技术网

C# 如何从十进制数中提取格雷码

C# 如何从十进制数中提取格雷码,c#,.net,numbers,gray-code,C#,.net,Numbers,Gray Code,可能重复: 我想从十进制等价物中得到一个数字的格雷码 例如: MSB保持不变。对于其余的位,右移一位并进行异或运算。如果执行逻辑右移,以便知道移位到MSB中的位是0,则只需移位和异或即可。MSB保持不变。对于其余的位,右移一位并进行异或运算。如果执行逻辑右移,以便知道移位到MSB中的位是0,则可以只执行移位和异或。假设只对非负整数执行此操作: #include<iostream.h> #include<conio.h> int deci,bits=0,deci_x3,b

可能重复:

我想从十进制等价物中得到一个数字的格雷码

例如:


MSB保持不变。对于其余的位,右移一位并进行异或运算。如果执行逻辑右移,以便知道移位到MSB中的位是0,则只需移位和异或即可。

MSB保持不变。对于其余的位,右移一位并进行异或运算。如果执行逻辑右移,以便知道移位到MSB中的位是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);
}
static uint BinaryToGray(uint num)
{
    return (num>>1) ^ num;
}

您可能还想阅读为双向转换提供方法的代码,尽管作者选择将代码表示为int数组,每个位置包含一个或零。就个人而言,我认为位数组可能是一个更好的选择。

假设您只想对非负整数执行此操作:

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

您可能还想阅读为双向转换提供方法的代码,尽管作者选择将代码表示为int数组,每个位置包含一个或零。就我个人而言,我认为比特数组可能是一个更好的选择。

谷歌的第一页提供了一整套解决方案,在C中,谷歌的第一页提供了一整套解决方案。这是什么?现在还不清楚这堵turboc代码墙是干什么用的。它是一个用C编写的程序,可以转换成二进制和格雷码格式。哈哈,turboc-@编码怪胎:OP要求的是C而不是Cwooops。一个大错误。很抱歉但问题中没有具体说明。怪物:再次检查-每个问题下面都有标签,指定问题与什么相关。这是什么?现在还不清楚这堵turboc代码墙是干什么用的。它是一个用C编写的程序,可以转换成二进制和格雷码格式。哈哈,turboc-@编码怪胎:OP要求的是C而不是Cwooops。一个大错误。很抱歉但是问题中没有指定。Freak:再次检查-每个问题下面都有标记,指定问题与什么相关。该方法不应该称为PositiveIntegerToGray,还是我遗漏了什么?谢谢。@csetzkorn,你觉得最清楚的就叫它。这个方法不应该叫PositiveIntegerToGray,还是我遗漏了什么?谢谢。@csetzkorn,你觉得最清楚的就叫它吧。