Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Binary - Fatal编程技术网

C 正在尝试将二进制代码转换为灰色代码

C 正在尝试将二进制代码转换为灰色代码,c,binary,C,Binary,我试图将二进制代码转换为格雷码,但我不知道这段代码有什么问题: #include <stdio.h> // I copied this function from wiki unsigned int binaryToGray(unsigned int num) { return num ^ (num >> 1); } int main(int argc, const char *argv[]) { unsigned int binarynum = 10

我试图将二进制代码转换为格雷码,但我不知道这段代码有什么问题:

#include <stdio.h>

// I copied this function from wiki
unsigned int binaryToGray(unsigned int num) {
    return num ^ (num >> 1);
}

int main(int argc, const char *argv[]) {
    unsigned int binarynum = 10;
    unsigned num = binaryToGray(binarynum);
    printf("%d!!", num);
    return 0;
}
#包括
//我从wiki复制了这个函数
unsigned int binaryToGray(unsigned int num){
返回num^(num>>1);
}
int main(int argc,const char*argv[]{
无符号整数二进制数=10;
unsigned num=binaryToGray(binarynum);
printf(“%d!!”,num);
返回0;
}

这应该可以正常工作。可以在printf处添加\n以在结果行中添加换行符。

要查看灰码的工作方式,请添加一个将数字转换为二进制表示形式的函数:

#include <stdio.h>

char *numtobin(char *buf, unsigned int num) {
    char temp[65], *p = buf + sizeof(buf);

    *--p = '\0';
    while (num >= 2) {
        *--p = '0' + (num & 1);
        num >>= 1;
    }
    *--p = '0' + num;
    return strcpy(buf, temp);
}

// I copied this function from wiki
unsigned int binaryToGray(unsigned int num) {
    return num ^ (num >> 1);
}

int main(int argc, const char *argv[]) {
    char buf1[65], buf2[65];
    unsigned int num, greynum;

    for (num = 0, num <= 32; num++) {
        greynum = binaryToGray(num);
        printf("%2d  %6s -> %6s  %-2d\n",
               num, numtobin(buf1, num), numtobin(buf2, greynum), greynum);
    }
    return 0;
}
#包括
char*numtobin(char*buf,unsigned int num){
煤焦温度[65],*p=buf+sizeof(buf);
*--p='\0';
而(num>=2){
*--p='0'+(数值和1);
num>>=1;
}
*--p='0'+num;
返回strcpy(buf,temp);
}
//我从wiki复制了这个函数
unsigned int binaryToGray(unsigned int num){
返回num^(num>>1);
}
int main(int argc,const char*argv[]{
char buf1[65],buf2[65];
无符号整数,greynum;

对于(num=0,num),那么对于特定的输入,您得到的输出是什么?是否有任何错误?这是经典的二进制到灰色代码转换函数,它做了什么您不期望的事情?如果输出没有出现,请修改
printf
以添加尾随换行:
printf(“%d!n”,num)
输入是10,它应该给我一个11英寸的灰色代码,但是这个代码打印的1510不是十进制的!试试2(十进制表示二进制10),它应该输出3(十进制表示11二进制)。谢谢,你说得对,这是works@JoshSu:如果这个答案符合你的需要,你能接受吗?