试图将二进制转换为greycode

时间:2015-12-25 21:41:04

标签: c binary

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

#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;
}

2 个答案:

答案 0 :(得分:1)

为了查看格雷码如何工作,添加一个将数字转换为二进制表示的函数:

#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;
}

答案 1 :(得分:0)

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